剑指offer,febonacci
题目:给定n,求斐波那契数列的第n项
分析:可以用递归的思路做,但是复杂度太高,可以从前往后运算,储存在数组中,以空间换时间
# fibonacci
def get_fibo(n):
start = [0,1]
if n<=1:
return start[n]
for i in range(2,n+1):
start.append(start[i-2]+start[i-1])
print(start)
return start[n]
print(get_fibo(8))
类似例题:青蛙跳台阶,青蛙可以一次跳一级或者两级台阶,问跳n级台阶有多少中方法?
分析:假设跳n级台阶有f(n)中方法,则f(1)=1,f(2)=2,当遇到n级台阶时,可以先跳一级,接下来有f(n-1)种跳法,或者先跳两级,接下来有f(n-2)种跳法,则可以得到递推公式f(n)=f(n-2)+f(n-1),本质上还是一个febonacci数列问题
延伸:若青蛙一次只能跳一级或者跳三级台阶,则问跳n级台阶一共有多少种方法?
分析:同样的,f(1)=1,f(2)=1,f(3)=2,f(4)=f(1)+f(3),此类问题的重点在递推,分以下步骤:
1.首先建立函数关系f(n)
2.找到最初的几项
3.循环(有些需要加判断条件)得到结果
延伸:可以进一步发散到动态规划问题