算法题(一)斐波拉契数列介绍及应用(JAVA语言)要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 一只青蛙一次可以跳上1级台阶,也可以跳上2级。

斐波拉契数列介绍
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。

斐波拉契数列应用

例题1

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39

我述

例题2

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

解析:
target ==0 0 种跳法
target ==1 1 种跳法 跳1级
target ==2 2 种跳法 跳2级,跳两次1级
target ==3 3 种跳法 有:
1、从前1级跳上来(即最后一步跳一级) target ==2
2、从前2级跳上来 (最后一步跳两级) target ==1
类推,f(n)=f(n-1)+f(n-2)
在这里插入图片描述

例题3

我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?
n == 0 0 种方法
n == 1 1 种方法 方1个
n== 2 2 种方法 竖着放两个,横着放两个
n ==3 3 种跳法 有:
1、先横着放一个,则下面横着的部分必须也是横着放,剩下2
(n-2)个位置
1、先竖着放一个,剩下2*(n-1)个位置
类推,f(n)=f(n-1)+f(n-2)

在这里插入图片描述

例题4 变态青蛙跳

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
错误的想法 (我之前的想法):对于N级来说,就是(n-1)的与(n-2)的情况加上青蛙一次性跳上来的次数,所以应该是J(n-1)+J(n-2)+1
但是实际的情况是,因为可以跳n级,所以青蛙可以从第1级开始跳n-1到n级,从第2级开始跳n-2级到n级,所以
J(n)=J(n-1)+J(n-2)+J(n-3)+…+J(n-(n-1));
J(n-1)=J(n-2)+J(n-3)+…+J(n-(n-1));
所以J(n)=J(n-1)*2;

在这里插入图片描述

以上题集来自剑指offer,使用牛客网在线编译。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章