Java/JavaScript/C/Python递归方法实现斐波那契数列耗时对比
斐波那契数列(Fibonacci sequence),指的是这样一个数列:1、1、2、3、5、8、13、21、34、……,这个数列从第3项开始,每一项都等于前两项之和。
递归方法实现耗时对比
用Java/JavaScript/C/Python递归方法实现斐波那契数列耗时对比
使用最基本的递归方法,计算第35、40、45、50个数字的耗时,单位毫秒。
35 | 40 | 45 | 50 | |
计算结果 |
9227465
|
102334155
|
1134903170
|
12586269025
|
Java | 31 | 338 | 3754 |
44567
|
C |
51
|
576
|
6606
|
67496
|
JavaScript |
93
|
990
|
10919
|
131531
|
Pythone |
2604
|
27927
|
316055
|
3661294 |
耗时结果: Java > C > JavaScript > Python
毫无疑问,与上一个普通循环判断测试一样,Java依然遥遥领先,Python最慢,第50个数字耗时已经超过1小时了,需要使用递归的小伙伴要慎重了!
附代码
Java
public class Fibonacci { public static void main(String[] args){ long start = System.currentTimeMillis(); System.out.println(fibonacci(50)); System.out.println(System.currentTimeMillis() - start); } public static long fibonacci(int n){ if (n <= 1){ return n; } return fibonacci(n-1) + fibonacci(n-2); } }
C
#include <stdio.h> #include <time.h> long long fibonacci(int n); long long fibonacci(int n) { if (n <= 1){ return n; } return fibonacci(n-1) + fibonacci(n-2); } int main () { clock_t start, finish; double elapsed_time; start=clock(); printf("%lld \n", fibonacci(50)); finish = clock(); printf("%d \n", finish); return 0; }
JavaScript
start = new Date().getTime(); function fibonacci(n){ if (n <= 1){ return n; } return fibonacci(n-1) + fibonacci(n-2); } console.log(fibonacci(50)) console.log(new Date().getTime() - start);
Python
import time start = time.time() def fibonacci(n): if n <= 1: return n return fibonacci(n-1) + fibonacci(n-2) print(fibonacci(50)) print(time.time() - start)