zoukankan      html  css  js  c++  java
  • 斐波那契

    通常求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;
    }
    

      

    世上无难事,只要肯登攀。
  • 相关阅读:
    java基础知识
    谈谈休眠/睡眠/关机和laptop硬件寿命
    常用的git指令查询
    java swing scroll can not work
    不必要的windows服务
    工作分配问题
    回溯算法
    第四章上机实践
    算法第四章作业
    第三章上机实践
  • 原文地址:https://www.cnblogs.com/littlehoom/p/3428209.html
Copyright © 2011-2022 走看看