斐波那契是1,1,2,3,5,8,13,21。。。。。 即前两项之和为第三项。程序实现如下
普通版的斐波那契:
1 <script type="text/javascript"> 2 function f(num) 3 { 4 5 if(num<=0) 6 7 { 8 9 console.log('请输入大于0的正整数'); 10 return ; 11 12 } 13 14 else if(num<=2 && num>0) 15 { 16 return 1; 17 } 18 else 19 { 20 return f(num-2)+f(num-1); 21 } 22 } 23 24 </script>
用三目运算符优化如下:
1 <script type="text/javascript"> 2 function f(num) 3 { 4 5 if(num<=0) 6 { 7 console.log('请输入大于0的正整数'); 8 return ; 9 } 10 return num<=2 && num>0 ? 1 : f(num-1)+f(num-2); 11 } 12 13 14 </script>
但是这样函数内部调用了函数的名称,假设该函数要改名,那就相当不完善了,函数内部和函数名紧紧耦合在一起了。所以可以用arguments.callee来表示该函数本身
进一步优化如下
1 <script type="text/javascript"> 2 function f(num) 3 { 4 5 if(num<=0) 6 { 7 console.log('请输入大于0的正整数'); 8 return ; 9 } 10 11 return num<=2 && num>0 ? 1 : arguments.callee(num-1)+arguments.callee(num-2); 12 } 13 14 15 </script>
至此,简单的优化就做成了。