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),以此类推。同理对于部分小矩形覆盖大矩形的问题也可以转换成斐波那契数列类的问题。

  • 相关阅读:
    开发一个微信小程序实例教程
    java注解
    dubbo provider提供者服务打包
    Dubbo记录
    SpringBoot整合ActiveMQ 生产者---消费者
    dubbox 的各种管理和监管
    Zookeeper 3.5启动时 8080端口被占用
    springboot整合最新版dubbo以及dubbo-admin的安装
    分布式服务框架 dubbo/dubbox 入门示例
    Maven安装配置【WIN10】
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5775487.html
Copyright © 2011-2022 走看看