zoukankan      html  css  js  c++  java
  • 斐波那契数列变形

       题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级台阶总共有多少种算法。

       解析:对于一般情况,把n级台阶的跳法看成是n的函数,记为f(n)。当n>2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,记为f(n-1);另外一种是第一次跳2级,此时跳法的数目等于垢面剩下的n-2级台阶的跳法数目,记为f(n-2)。因此n级台阶的跳法数目f(n)=f(n-1)+f(n-2)。代码和斐波那契数列的代码相同,非递归实现如下。

    #include<iostream>
    
    long long Fibonacci(unsigned int n){
       if(n<=2)
        return n-1;
    
       long long fibNumberOne = 1;
       long long fibNumberTwo = 0;
       long long fibN = 0;
       for(unsigned int i = 2;i < n;i++){
            fibN = fibNumberOne + fibNumberTwo;
            fibNumberTwo = fibNumberOne;
            fibNumberOne = fibN;
       }
       return fibN;
    }
    
    int main(){
        unsigned int fiboNumber;
        while(std::cin>>fiboNumber){
            std::cout<<Fibonacci(fiboNumber)<<std::endl;
        }
        return 0;
    }
    View Code

       同理如果青蛙一次可以跳1级、2级...n级等等,那么跳法的数目f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(n),数学归纳法可证为f(n)=2^(n-1),以此类推。同理对于部分小矩形覆盖大矩形的问题也可以转换成斐波那契数列类的问题。

  • 相关阅读:
    数模竞赛-长三角旅游路线
    数模培训-高压油管
    数模培训-城市表层土壤重金属污染问题
    数模练习-养孩子
    SpringBoot01
    搬家啦
    P4655 [CEOI2017]Building Bridges
    深入理解斜率优化
    暴力 K 短路的一个小细节
    搜索优化
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5775487.html
Copyright © 2011-2022 走看看