• 斐波那契


    通常求n的斐波那契数,我们就是简单的使用如下的递归函数:

    int fib1(int n)
    {
         if(n<=1) return n;
         return fib1(n-1)+fib1(n-2);
    }
    

      其实,这种递归所能求的n的范围很有限,空间和时间上都是以指数级在增长,假如n仅仅等于40,所要花费的时间也已经很长了。

      从递归树中我们可以看出,其实只要有一个数组能够记录下每次得到的结果,那么就能节省空间和时间,这种思想是出于记忆搜索或者动态规划的想法。

    int memo[MAX+1];
    
    int fib2(int n)
    {
         if(n<=1) return n;
         if(memo[n]!=0) return memo[n];
         return memo[n] = fib2(n-1)+fib2(n-2);
    }
    

      源代码:

    #include<iostream>
    #include<cstring>
    #define MAX 200
    using namespace std;
    
    int fib1(int n)
    {
         if(n<=1) return n;
         return fib1(n-1)+fib1(n-2);
    }
    
    int memo[MAX+1];
    
    int fib2(int n)
    {
         if(n<=1) return n;
         if(memo[n]!=0) return memo[n];
         return memo[n] = fib2(n-1)+fib2(n-2);
    }
    
    int main()
    {
         memset(memo, 0 ,sizeof(memo));
    
    //     int n1 = fib1(40);
    //     cout<<n1<<endl;
    
         int n2 = fib2(40);
         cout<<n2<<endl;
    
         return 0;
    }
    

      

    世上无难事,只要肯登攀。
  • 相关阅读:
    WEB API&API
    event flow
    JS-for的衍生对象
    JS-function
    Object Constructor
    前端发展史
    JavaScript中document.getElementById和document.write
    正则表达式把Paul换成Ringo
    11th blog
    10th week blog
  • 原文地址:https://www.cnblogs.com/littlehoom/p/3428209.html
Copyright © 2020-2023  润新知