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