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);
                        }
    
  • 相关阅读:
    APK中java代码反编译
    android应用分析之apk文件结构
    2016第8周五
    优秀前端需要具备的经验
    postgreSQL数据类型转换字符串和数值
    架构设计要考虑的几个方面
    2016第8周一
    常见的交互设计方法
    开源项目使用经验原则
    ExtJS与JQuery对照
  • 原文地址:https://www.cnblogs.com/bluey/p/6417678.html
Copyright © 2011-2022 走看看