每日一题(30)- 斐波那契数列以及应用
来源:互联网 发布:at指令集的gprs源码 编辑:程序博客网 时间:2024/05/16 16:07
题目来自剑指offer
题目:
说明:
形成的斐波那契数列为:0,1,2,3,5,8...
思路:
可以直接使用递归,但是有重复子问题。可以使用迭代。
递归代码:
long Fibonacci(unsigned int n){if (n == 1){return 1;}if (n == 2){return 2;}return Fibonacci(n - 1) + Fibonacci(n - 2);}
迭代代码:
long Fibonacci(long n){long One = 1;long Two = 2;long Sum = 0;for (long i = 3;i <= n;i++){Sum = One + Two;One = Two;Two = Sum;}return Sum;}斐波那契数列的应用
1、兔子繁殖问题
2、矩形覆盖问题
3、青蛙跳台阶问题
---------------------------------------------
1、兔子繁殖问题
题目:兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子(一公一母)来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
思路:详细见百度百科:斐波那契数列
2、矩形覆盖问题
题目:
分析:
假设f(n)表示覆盖2 * n的矩形的总放法,其中2表示行,n表示列,我们要求f(8)。
f(1):只有一种方法。就是找一个2*1的矩形竖着放
f(2):两种方法,找两个2*1矩形竖着放,或者两个2*1矩形横着放
f(3):三种方法,找三个2*1矩形都是竖着放(一种),找一个2*1矩形竖着放,两个2*1矩形竖着放(2种)
。。。之后会发现是一个斐波那契数列。。。
3、青蛙跳台阶问题
题目(1):一个台阶总共有n级,一个青蛙一次可以跳1级,也可以跳2级。求青蛙跳上n级台阶总共有多少总跳法?
分析:
如果只有1个台阶,那么只有一种跳法;
如果只有2级台阶,那么有2种跳法。
对于一个n级台阶的楼梯来说,设跳法为 f(n) :
假如我们先跳1个台阶,则剩下有 n-1 个台阶,跳法为 f(n-1) 次,
假如我们先跳2个台阶,则剩下 n-2 阶,跳法为 f(n-2);
由此可以推出,对于一个n阶的楼梯,有以下这个跳台阶的公式:
题目(2):一个台阶总共有n级,一个青蛙一次可以跳1级,也可以跳2级,也可以跳三级。求青蛙跳上n级台阶总共有多少总跳法?
分析:
如果只有1个台阶,那么只有一种跳法;
如果只有2级台阶,那么有2种跳法。
如果只有3级台阶,那么有4种跳法。
对于一个n级台阶的楼梯来说,设跳法为 f(n) :
假如我们先跳1个台阶,则剩下有 n-1 个台阶,跳法为 f(n-1) 次,
假如我们先跳2个台阶,则剩下 n-2 阶,跳法为 f(n-2);
假如我们先跳3个台阶,则剩下 n-3 阶,跳法为 f(n-3);
由此可以推出,对于一个n阶的楼梯,有以下这个跳台阶的公式:
题目(3):一个台阶总共有n级,一个青蛙一次可以跳1级,也可以跳2级......它也可以跳上n级。此时该青蛙跳上一个n级的台阶总共有多少种跳法?
分析:
如果只有1个台阶,那么只有一种跳法;(1)
如果只有2级台阶,那么有2种跳法。(1,1)(2)
如果只有3级台阶,那么有4种跳法。(1,1,1)(1,2)(2,1),(3)
对于一个n级台阶的楼梯来说,设跳法为 f(n) :
假如我们先跳1个台阶,则剩下有 n-1 个台阶,跳法为 f(n-1) 次,
假如我们先跳2个台阶,则剩下 n-2 阶,跳法为 f(n-2);
假如我们先跳3个台阶,则剩下 n-3 阶,跳法为 f(n-3);
....
假如我们先跳n - 1个台阶,则剩下1阶,跳法为 f(1);
假如我们先跳n个台阶,则剩下1阶,跳法为 f(0);
由此可以推出,对于一个n阶的楼梯,有以下这个跳台阶的公式:
f(n) = f(0) + f(1) + f(2) + ... +f(n - 1)
同理有:
f(n - 1) = f(0) + f(1) + f(2) + ... +f(n - 2)
两个式子作差得到
f(n) - f(n - 1) = f(n - 1)
即,f(n) = 2f(n - 1)
则递推式子为:
- 每日一题(30)- 斐波那契数列以及应用
- js每日一算法之斐波那契数列
- 每日一题 No.15 兔子繁殖问题(斐波那契数列)
- 斐波那契数列的非递归c语言实现以及斐波那契数列的应用
- 斐波那契数列的应用
- 算法应用-斐波那契数列
- 斐波那契数列及其应用
- 算法一---斐波那契数列
- 【水题算法】斐波那契数列的应用
- 每日一练 02 菲波那切数列
- codevs3969[Mz]平方和 矩阵快速幂以及斐波那契数列性质的应用
- 杭电2044--一只小蜜蜂...--(递推求解)斐波那契数列应用
- 栈的应用一--斐波那契(Fibonacci)数列的实现(代码)
- 数组以及数组操作实例 斐波那契数列
- 斐波那契数列实例讲解以及C++实现
- 2、斐波那契数列以及青蛙跳台阶
- 快速幂以及斐波那契数列的运用
- 青蛙跳台阶(斐波那契数列应用)
- linux c编程获得当前进程的进程名和执行路径
- 二分法思想
- B.Arithmetic Progression(13.7.7)
- 关于spring Ioc的解释很容易让人理解的文章分享一下
- tar.bz2解压
- 每日一题(30)- 斐波那契数列以及应用
- ios 重用UITableViewCell created from a XIB
- Kafka开发环境搭建
- 黑马程序员:Java基础总结----枚举
- java concurrent—semphore
- Kafka实现细节(上)
- 大数加法
- Kafka实现细节(下)
- tomcat7.0