问题描述
青蛙跳台阶,一次可以跳两个台阶,也可以跳一个台阶。问青蛙跳到n个台阶,总共有多少种跳法。
问题分析
当台阶n=1时,青蛙只有一次跳一个台阶这一种方法。因此f(1)=1。
当台阶n=2时,青蛙可以一次跳一个台阶,也可以一次跳两个台阶。共有两种方法。因此f(2)=2。
当台阶n=3时,青蛙可以从台阶为1的位置一次挑两个台阶上来,也可以从台阶为2的位置一次跳一个台阶上来,共有3种方法。因此f(3)=f(1)+f(2)。
由此可见,此问题实质是Fibonacci问题的变形,python代码为:
def fibonacci(n):
if n == 0 or n == 1:
return n
f1, f2, f3 = 1, 2, 3
i = 3
while i <= n:
f3 = f1 + f2
f1 = f2
f2 = f3
i += 1
return f3
利用回溯解决
当然,问题也是典型的回溯问题,可以利用回溯解决。python代码为:
way = 0
def traceback(n, step_num):
global way
if n > step_num:
return
if n == step_num:
way += 1
return
traceback(n+1, step_num)
traceback(n+2, step_num)
print(fibonacci(20))
traceback(0, 20)
print(way)