zoukankan      html  css  js  c++  java
  • 求斐波那契数列的第n项

    题目:写一个函数,输入n,求斐波那契数列的第n项F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*)

    方式一:使用数组缓存已经得到的结果

     //缓存已经得到的数 
              var Fibonacci = (function() {
               var cache = [0, 1];
                    return function(n) {
                                var result = cache[n];
                                if (typeof result != "undefined") {
                                    return result;
                                } else {
                                    cache[n] = Fibonacci(n - 1) + Fibonacci(n - 2);
                                    return cache[n];
                                }
                            }
                        })();
    

    方式二:普通递归

     //这种效率很低
                     function fi(n) {
                            
                            if (n <= 0) return 0;
                            if (n == 1) return 1;
                            return fi(n - 1) + fi(n - 2);
                        }
    

    方式三:尾递归方式

                        //尾递归方式。当一个函数调用另一个函数,一个新的堆栈帧 (stack frame) 被分配用来保存函数的数据状态。无限递归会导致内存问题,因为堆栈帧的分配有一个上限。如果你的调用达到了可分配的上限,它将会导致堆栈溢出。尾递归的思想:让一个递归函数在每一次迭代中复用同一个堆栈,但是它只对递归调用在尾部时有效。一个调用在尾部的意思是函数返回的递归调用结果不再参与任何进一步的计算。
                    
                         function tailfi(n) {
                            return (function(n1, n2, i) {
                                return (i <= n) ? arguments.callee(n2, n1 + n2, i + 1) : n1;
                            })(0, 1, 1);
                        }
    
  • 相关阅读:
    spring 解析bean
    Spring Cloud
    Spring
    JDK动态代理源码实现深入分析
    一个很坑的问题,button 的onclick方法失效了
    web总结
    字符串编码
    海量数据的解决方案--笔记
    链接保存
    读《JVM虚拟机》- 集中简单的垃圾收集算法
  • 原文地址:https://www.cnblogs.com/bluey/p/6417678.html
Copyright © 2011-2022 走看看