Zmierzyłem czas wykonania rekurencyjnej implementacji ciągu Fibonacciego (wiem nie można ufać JVM ani dokładności ) ale czy te czasy są w miarę realnymi wynikami ?
C++ 2930 milisekund
JAVA 1865 millisekund
C 2893 milisekund
C++
#include <iostream>
#include <chrono>
#include<stdlib.h>
#include<time.h>
using namespace std;
static long fibonaci( long wyraz)
{
if(wyraz<=1)
{
return wyraz;
}
else{
return fibonaci(wyraz-1)+fibonaci(wyraz-2);
}
}
int main()
{
std::chrono::time_point<std::chrono::system_clock> now =
std::chrono::system_clock::now();
auto duration = now.time_since_epoch();
auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
fibonaci(43l);
std::chrono::time_point<std::chrono::system_clock> now2 =
std::chrono::system_clock::now();
auto duration2 = now2.time_since_epoch();
auto millis2 = std::chrono::duration_cast<std::chrono::milliseconds>(duration2).count();
cout<<millis2-millis;
return 0;
}
Java
public class Czas {
public static long fib(long wa) {
if(wa<=1)
{return wa;
}
else {
return fib(wa-1)+fib(wa-2);
}
}
public static void main(String []args)
{
System.out.printf("Wynik %d%n", fib(10));
long millisActualTime = System.currentTimeMillis();
fib(43);
long executionTime = System.currentTimeMillis() - millisActualTime;
System.out.printf("Czas %d", executionTime);
}
}
Dodam że iteracyjne również Java jest szybsza