zoukankan      html  css  js  c++  java
  • 算法36 动规初探&&斐波那契&&尾递归

    爬楼梯问题抽象出来就是斐波那契数列求和,
    像这样递推公式,第一时间想到就是用递归

    普通树形递归

    一提交就爆栈,当n过大时压不住

        case 10: result = 89; 
    
        case 20: result = 10946; 
    
        case 45: result = 1836311903; 
    
    class Solution {
    public:
        int climbStairs(int n) {
            return f(n);
        }
        int f(int n){
            if (n==2) return 2;
            if (n==1) return 1;
            return f(n-1)+f(n-2);
    
        }
    };
    

    循环

    空间复杂度O(1)

    class Solution {
    public:
        int climbStairs(int n) {
    if (n<=2) return n;
    
            int x[n+1];
            x[1]=1;
            x[2]=2;
    
            for(int i=3;i<=n;i++){
                x[i]=x[i-1]+x[i-2];
            }
            return x[n];    }
        
    };
    

    先看一下线形递归

    class Solution {
    public:
        int climbStairs(int n) {
            return f(n,1,1);
        }
    
        int f(int n,int a,int b){
            if(n==1) return 1;
            
            return a+f(n-1,b,a+b);
        }
        
    };
    

    尾递归

    空间复杂度O(1)

    class Solution {
    public:
        int climbStairs(int n) {
            return f(n,1,1);
        }
    
        int f(int n,int a,int b){
            if(n==1) return a;
            // int Sum_last=a+b;
            // int Sum_llast=b;
            return f(n-1,a+b,a);
        }
        
    };
    
  • 相关阅读:
    日程管理系统找Bug
    #单元测试
    读后感
    四则运算
    事后诸葛亮会议
    数据流图和数据流程图
    时序图
    ER图
    uml用例图
    第一迭代感想
  • 原文地址:https://www.cnblogs.com/impw/p/15718500.html
Copyright © 2011-2022 走看看