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);
                        }
    
  • 相关阅读:
    视频播放的基本原理
    MPEG2 PS和TS流格式
    使用java连接hive,并执行hive语句详解
    杭电 3887 Counting Offspring
    java值传递
    android面试题之五
    程序人生:工作、生活、梦想
    HDU4756+Prim
    两分钟让你明白cocos2dx的屏幕适配策略
    Expected authority at index 7: hdfs://
  • 原文地址:https://www.cnblogs.com/bluey/p/6417678.html
Copyright © 2011-2022 走看看