Javascript递归与各种循环执行效率的比较

以下分别是用递归和两种循环对斐波那契数列的简单实现。(结果仅供参考)

 

递归的模式:

function Fibonacci(num){ if(num <= 2){ return 1; }else{ return Fibonacci(num - 1) + Fibonacci(num - 2) } } var counter1 = new Counter(); Fibonacci(30); counter1.show() //Firefox 下结果为413毫秒

 

While循环的模式:

function FibonacciWhile(number){ if(number>2){ var num1=num2=1,times=number-2,i=1; while(i<=times){ result = num1+num2; num1 = num2; num2 = result; i++; } return result; }else if(number>0){ return 1; } } var counter2 = new Counter(); FibonacciWhile(3000000); counter2.show() //Firefox 下结果为530毫秒

 

For循环的模式:

 

 function FibonacciFor(n){ if (n > 2) { for (var i=1,f0=1,f1=1,times=n-2; i <= times; i++) { currentFib = f0 + f1; f0 = f1; f1 = currentFib; } return currentFib; }else if(n>0){ return 1; } } var counter3 = new Counter(); FibonacciFor(3000000); counter3.show() //Firefox 下结果为380毫秒

 

递归到30花了410毫秒,While循环到3000000花了530毫秒,而For循环算到3000000之花了380毫秒。

 

对比一下就可以看出:

循环的效率是递归的上万倍。

不仅如此,用递归在我的电脑只能算到100以内,再多Firefox就会跳提示框出来。

所以当我们写代码的时候,能用循环还是应该多用循环.

你可能感兴趣的:(Javascript)