美文网首页
上下楼梯问题

上下楼梯问题

作者: 執著我們的執著 | 来源:发表于2019-08-12 22:47 被阅读0次

    这是一个非常常见的编程题
    题目是这样的:小明上楼梯,每次可以上一层,也可以上两层,那么他爬上100层有多少上楼梯的方式?(1000层...同理)
    很多人一看,这个简单,递归实现啊!!!
    递归的思想:
    设爬上n层的方式有f(n)种,
    那么如果最后一步只上1层的方式就有f(n-1)种(即最后一步小明在第n-1层,方式如假设的那样就是f(n-1)
    如果最后一步是上了2层的方式就有f(n-2)
    则爬上第n层的方式可以最后一步只上一层,也可以2层,即:f(n)=f(n-1)+f(n-2)

    #include<iostream>
    using namespace std;
    
    unsigned int Func(unsigned int n)
    {
        if ((0==n)|| (1==n)|| (2==n))
        {
            return n;
        }
        
        return Func(n-1)+Func(n-2);
    }
    
    int main()
    {
        unsigned int num = 100;
        cout<<Func(100)<<endl;
        
        return 0;
    }
    

    但是递归的方式会造成反复的重复计算,浪费时间资源,就像计算100层,我用devC++运行跑了很长时间,既然我们知道了爬楼梯的公式,那么不妨采用迭代的方式来实现

    unsigned int Func(int n)
    {
        if (n<0)
        {
            exit(1);
        }
        if((0==n) || (1==n) || (2==n))
        {
            return n;
        }
        unsigned int temp1 = 1;
        unsigned int temp2 = 2;
        unsigned int temp = 0;
        unsigned int num = n;
        while (num >=3)
        {
            temp = temp1 + temp2;
            temp1 = temp2;
            temp2 = temp;
            num --;
        }
    
        return temp;
    }
    

    相关文章

      网友评论

          本文标题:上下楼梯问题

          本文链接:https://www.haomeiwen.com/subject/vncqtqtx.html