Der Quelltext für die Javaversion ist folgender:
// Time-stamp: "29.03.06 15:46 fakultaet.java klaus@wachtler.de" // // Musterlösung der Aufgabe "Fakultät". // Es wird die Fakultät einer Zahl jeweils iterativ und rekursiv // berechnet und die dafür benötigten Laufzeiten ausgegeben. // // javac fakultaet.java && java fakultaet import java.util.*; public class fakultaet { // Berechnet iterativ die Fakultät des übergebenen Parameters public static long fakultaet_iterativ( int n ) { long produkt = 1; for( int i=2; i<=n; ++i ) { produkt *= i; } return produkt; } // Berechnet rekursiv die Fakultät des übergebenen Parameters public static long fakultaet_rekursiv( int n ) { return n<=1 ? 1 : n*fakultaet_rekursiv( n-1 ); } public static void main( String args[] ) { final int anzahl = 1000000; // Soviele Durchläufem um die // Auflösung der internen Uhr zu // erhöhen long start, ende; // der Zeitmessung start = System.currentTimeMillis(); for( int i=0; i<anzahl; ++i ) { fakultaet_rekursiv( 15 ); } ende = System.currentTimeMillis(); System.out.println( "rekursiv: " + ( (double)ende -start )/anzahl + " msec" ); start = System.currentTimeMillis(); for( int i=0; i<anzahl; ++i ) { fakultaet_iterativ( 15 ); } ende = System.currentTimeMillis(); System.out.println( "iterativ: " + ( (double)ende -start )/anzahl + " msec" ); //System.out.println( "" + n + "! = " + fakultaet_rekursiv( n ) ); //System.out.println( "" + n + "! = " + fakultaet_iterativ( n ) ); } } // public class fakultaet
Das Programm erzeugt auf meinem Rechner folgende Ausgabe:
rekursiv: 0.009647 msec iterativ: 0.001996 msec
Der Quelltext für die C-Version ist folgender:
/* Time-stamp: "29.03.06 15:58 fakultaet.c klaus@wachtler.de" * * * Musterlösung der Aufgabe "Fakultät" * */ #include <stdlib.h> #include <stddef.h> #include <stdio.h> #include <time.h> // Berechnet iterativ die Fakultät des übergebenen Parameters long fakultaet_iterativ( int n ) { long produkt = 1; int i; for( i=2; i<=n; ++i ) { produkt *= i; } return produkt; } // Berechnet rekursiv die Fakultät des übergebenen Parameters long fakultaet_rekursiv( int n ) { return n<=1 ? 1 : n*fakultaet_rekursiv( n-1 ); } int main( int nargs, char **args ) { const int anzahl = 10000000; // Soviele Durchläufem um die // Auflösung der internen Uhr zu // erhöhen clock_t start, ende; // der Zeitmessung int i; start = clock(); for( i=0; i<anzahl; ++i ) { fakultaet_rekursiv( 15 ); } ende = clock(); printf( "rekursiv: %f msec\n", ( (double)ende -start )/CLOCKS_PER_SEC/anzahl*1000 ); start = clock(); for( i=0; i<anzahl; ++i ) { fakultaet_iterativ( 15 ); } ende = clock(); printf( "rekursiv: %f msec\n", ( (double)ende -start )/CLOCKS_PER_SEC/anzahl*1000 ); return 0; } /* main( int nargs, char **args ) */
Das Programm erzeugt auf meinem Rechner folgende Ausgabe:
rekursiv: 0.000408 msec rekursiv: 0.000269 msec