zoukankan      html  css  js  c++  java
  • code第一部分数组:第十七题 爬楼梯问题

    code第一部分数组:第十七题 爬楼梯问题

    You are climbing a stair case. It takes n steps to reach to the top.
    Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

    分析
    设 f(n) 表示爬 n 阶楼梯的不同方法数,为了爬到第 n 阶楼梯,有两个选择:
    • 从第 n − 1 阶前进 1 步;
    • 从第 n − 1 阶前进 2 步;
    因此,有 f(n) = f(n − 1) + f(n − 2)。
    这是一个斐波那契数列。

    两种方法,一是迭代,二是递归

    #include <iostream>
    
    using namespace std;
    
    int climbStairs(int n)
    {
        int prev = 0;
        int cur = 1;
        for(int i = 1; i <= n ; ++i)
        {
            int tmp = cur;
            cur = prev + cur;
            prev = tmp;
        }
        return cur;
    }
    
    int climbStairs2(int n)
    {
        if (n<=0)
        {
            return 0;
        }
        if (n==1)
        {
            return 1;
        }
        if (n==2)
        {
            return 2;
        }
        if (n>2)
        {
            int ans=climbStairs2(n-1)+climbStairs2(n-2);
            return ans;
        }
    }
    
    
    
    int main()
    {
        int stairs=4;
        int ans=climbStairs(stairs);
        cout<<"ans1 is "<<ans<<endl;
    
        int ans2=climbStairs2(stairs);
        cout<<"ans2 is "<<ans2<<endl;
        return 0;
    }
  • 相关阅读:
    第04组 Beta冲刺 (3/5)
    第04组 Beta冲刺 (2/5)
    第04组 Beta冲刺 (1/5)
    软工实践个人总结
    第09组 每周小结(3/3)
    第09组 每周小结(2/3)
    第09组 每周小结(1/3)
    第09组 Beta冲刺 总结
    第09组 Beta冲刺 (5/5)
    第09组 Beta冲刺 (4/5)
  • 原文地址:https://www.cnblogs.com/tao-alex/p/6443048.html
Copyright © 2011-2022 走看看