目录

一、斐波那契数列

二、青蛙跳台阶问题

三、变态跳台阶


一、斐波那契数列

题目:写一个函数,输入n,求斐波那契数列的第n项。

思路:用递归的方法,f(n) =f(n-1) + f(n-2)。代码比较简单。

#include<iostream>
using namespace std;int Fibonacci(int n)
{if(n <= 0){return 0;}if(n == 1){return 1;}return Fibonacci(n-1)+Fibonacci(n-2);
}int main()
{cout << Fibonacci(-1) << " ";cout << Fibonacci(0) << " ";cout << Fibonacci(1) << " ";cout << Fibonacci(2) << " ";cout << Fibonacci(3) << " ";cout << Fibonacci(4) << " ";cout << Fibonacci(5) << " ";return  0;
}

上面的代码如果n的值较大,递归的次数较多,就会造成栈溢出。

代码优化:

思路:可以用循环将数字从开始加到n。

#include<iostream>
using namespace std;int Fibonacci(int n)
{int f1 = 1;int f2 = 1;int f3 = 0;if(n <= 0){return 0;}if(n == 1 || n == 2){return 1;}while(n > 2){f3 = f1+f2;f1= f2;f2= f3;n--;}return f3;
}int main()
{cout << Fibonacci(-1) << " ";cout << Fibonacci(0) << " ";cout << Fibonacci(1) << " ";cout << Fibonacci(2) << " ";cout << Fibonacci(3) << " ";cout << Fibonacci(4) << " ";cout << Fibonacci(5) << " ";return  0;
}

二、青蛙跳台阶问题

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

思路:一级台阶只有一种跳法。两级台阶可以一次跳一级,也可以一次跳两级,一共两种方法。如果是三级的话,就是从二阶或者从一阶跳上来,以此类推,所以可以用递归的方式。

#include<iostream>
using namespace std;int JumpFloor(int n)
{if( n <= 0){return 0;}if( n == 1 || n == 2 ){return n;}return JumpFloor(n-1) + JumpFloor(n-2);
}int main()
{cout << JumpFloor(0) << endl;cout << JumpFloor(1) << endl;cout << JumpFloor(2) << endl;cout << JumpFloor(3) << endl;cout << JumpFloor(4) << endl;cout << JumpFloor(5) << endl;return 0;
}

代码优化,思路和上面的例子相同。

#include<iostream>
using namespace std;int JumpFloor(int n)
{if( n <= 0){return 0;}if( n == 1 || n == 2){return n;}int f1 = 1;int f2 = 2;int f3 = 0;while(n > 2){f3= f1+f2;f1 = f2;f2 = f3;n--;}return f3;
}int main()
{cout << JumpFloor(0) << endl;cout << JumpFloor(1) << endl;cout << JumpFloor(2) << endl;cout << JumpFloor(3) << endl;cout << JumpFloor(4) << endl;cout << JumpFloor(5) << endl;return 0;
}

三、变态跳台阶

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

思路:当有一级台阶时,跳法::0->1。

当有二级台阶时,跳法: 0->1->2 ,0->2。

当有三级台阶时,跳法: 0->1->2->3,0->1->3, 0->2->3, 0->3。

当有四级台阶时,跳法: 0->1->2->3->4,0->1->2->4,0->1->3->4, 0->1->4,0->2->3->4,0->2->4,0->3->4,0->4。

规律:f(n) = 2^(n-1)。

#include<iostream>
using namespace std;int JumpFloor(int n)
{if(n <= 0){return 0;}if(n == 1 || n == 2){return n;}return 2 *JumpFloor(n-1) ;
}int main()
{cout << JumpFloor(-1) << endl;cout << JumpFloor(0) << endl;cout << JumpFloor(1) << endl;cout << JumpFloor(2) << endl;cout << JumpFloor(3) << endl;cout << JumpFloor(4) << endl;cout << JumpFloor(5) << endl;
}

优化:

int JumpFloor(int n)
{if(n <= 0){return 0;}if(n == 1){return 1;}int count = 1;while(n-1 != 0){count *= 2;n--;}return count;
}int main()
{cout << JumpFloor(-1) << endl;cout << JumpFloor(0) << endl;cout << JumpFloor(1) << endl;cout << JumpFloor(2) << endl;cout << JumpFloor(3) << endl;cout << JumpFloor(4) << endl;cout << JumpFloor(5) << endl;
}

斐波那契数列 青蛙跳台阶 变态跳台阶相关推荐

  1. 把数字翻译成字符串/斐波那契数列/青蛙跳台阶

      今天做到剑指Offer中面试题46:把数字翻译成字符串,一看,这不是之前的斐波那契数列和青蛙跳台阶的翻版吗?遂记录一下解题思路. 题目:给定一个数字,我们按照如下规则把它翻译为字符串: 0 0 0 ...

  2. 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  3. python小明爬楼梯_LintCode Python 简单级题目 111.爬楼梯 (斐波纳契数列 青蛙跳)

    **设f(n)为n阶台阶的情况下,所有不同的跳法方法的总和!** 1.如果起始跳一阶的话,剩余的n-1阶就有 f(n-1) 种跳法: 2.如果起始跳二阶的话,剩余的n-2阶就有 f(n-2) 种跳法: ...

  4. 循环斐波那契数列_剑指offer #10 斐波那契数列

    (递归和循环)#10 斐波那契数列 一.斐波那契数列 定义: n = 0 , f(n) = 0 n = 1 , f(n) = 1 n > 1 , f(n) = f(n-1) + f(n-2) 思 ...

  5. 斐波那契数列算法分析

    http://www.cnblogs.com/CCBB/archive/2009/04/25/1443441.html 背景: 假定你有一雄一雌一对刚出生的兔子,它们在长到一个月大小时开始交配,在第二 ...

  6. Think in Java之斐波那契数列

    斐波纳契数列(Fibonacci Sequence),又称黄金分割数列. 指的是这样一个数列:1.1.2.3.5.8.13.21.--这个数列从第三项开始,每一项都等于前两项之和. 在数学上,斐波纳契 ...

  7. python兔子繁殖问题中如何输出相应月份的数列_斐波那契数列介绍及Python中五种方法斐波那契数列...

    Q:斐波那契数列为何那么重要,全部关于数学的书几乎都会提到? A:由于斐波那契数列在数学和生活以及天然界中都很是有用.html 1. 斐波那契数列 概念引入 斐波那契数列(Fibonacci sequ ...

  8. 斐波那契数列的各种求法

    斐波那契数列百科名片 "斐波那契数列"是意大利数学家列昂纳多·斐波那契首先研究的一种递归数列, 它的每一项都等于前两项之和. 此数列的前几项为1,1,2,3,5等等. 在生物数学中 ...

  9. 斐波那契数列介绍及Python中五种方法斐波那契数列

    Q:斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到? A:因为斐波那契数列在数学和生活以及自然界中都非常有用. 1. 斐波那契数列 概念引入 斐波那契数列(Fibonacci sequenc ...

最新文章

  1. ASP.net实现邮件发送
  2. mysql pdo 事务处理_php中pdo的mysql事务处理实例
  3. SqlServer无法连接服务器
  4. 毕业软件测试论文大纲,测试论文大纲模板范本 测试论文提纲怎样写
  5. app自动化之monkey测试
  6. movsw 汇编_汇编指令之ADC、SBB、XCHG、MOVS指令
  7. kubernetes面试题汇总
  8. javascript实现锁定网页、密码解锁效果(屏幕保护效果)
  9. 12届蓝桥杯青少年组国赛C++中级组编程题
  10. 015:苹果和虫子2
  11. 公有ip地址和私有ip地址_如何查找您的私有和公共IP地址
  12. rip neighbor_借助众筹平台Neighbor.ly透明地提高公民素质
  13. 微信公众平台java开发详解
  14. zemax模拟ld_使用ZEMAX 序列模式模拟激光二极管光源
  15. php 微信平台,【php】微信公众平台
  16. 银行计算机知识心得体会,银行员工入职心得体会
  17. 恒大、碧桂园、万科三巨头转身
  18. 随机搜索(Random Searching)算法概述
  19. 苹果接盘曼联被辟谣/ 特斯拉FSD北美完全开放/ 马斯克脑机接口准备人体试验/ 微软收购暴雪遇阻…今日更多新鲜事在此...
  20. 保时捷 Mac高清壁纸来了

热门文章

  1. 使用NGINX作为HTTPS正向代理服务器
  2. 5分钟了解阿里时序时空数据库
  3. 搜索引擎背后的原理和中文日志检索
  4. CSDN 开学见面礼!3 周带你 Get 大厂工程师基础能力
  5. 出道50年+!乘风破浪的编程语言们,能二次翻红吗?
  6. 想提升微服务容错性?试试这5种模式
  7. 云+X案例展 | 民生类:基于AWS PaaS构建基础集团企业级中台
  8. 2020年进军 AI,想年薪 40 万,没这个能力不行
  9. 我要自学网java jsp_学javaweb需要什么基础?零基础如何学习javaweb?
  10. 设置android应用闪屏图片_Android实现启动页面(闪屏页面)