题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
规律观察:
n=1,【1】
n=2,【1,1】,【2】
n=3,【1,1,1】,【1,2】,【2,1】
n=4,【1,1,1,1】,【1,2,1】,【2,1,1】,【2,2】
... ...
可通过观察数字的顺序发现,下一次的跳法是上一次跳法的所有情况+1,然后所有情况-1+2(也就是说上一种跳法的上一种),即前两次情况相加。
这种情况的本质即斐波那契数列的规律,那么一般性的:
n=k,总的方法数=k-1次的方法数+k-2次的方法数
记f(n)为n阶台阶的方法数,几种特殊情况即第1次和第2次:
n=0,f(0)=0
n=1,f(1)=1
n=2,f(2)=2
于是,递归算法为:
def methods(n):
a = 1
b = 2
if n < 0:
print "输入错误! n应为大于等于0的整数"
return -1
if n == 0:
return 0
if n == 1:
return a
if n == 2:
return b
if n > 2:
return methods(n-1) + methods(n-2)
非递归算法为:
def methods(n):
# 前面同上,此处略过
if n > 2:
sum = 0
for i in range(2,n):
sum = a + b
a = b
b = sum
return sum