Python青蛙跳台阶的问题
问题:
一只青蛙要跳上n层高的台阶,一次能跳一阶,也可以跳2阶,请问这只青蛙跳上n层高的台阶有多少种跳法?
背景知识点补充(了解)
- 斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
补充:通俗来讲当n>=2,该元素为前两位的数字之和,依次往后 - 递归函数
如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
def calnum(num):
if num >= 1:
result = num * calnum(num-1) # 函数内部调用自己
else:
result = 1
return result
print(calnum(3)) # 结果为6
思路分析
设青蛙跳上n级台阶有f(n)总方法,f(n)总方法分为两种:
- 最后一次跳了一级台阶,这类方法共有f(n-1)种;
- 最后一次跳了两级台阶,这类方法共有f(n-2)种。
因此,可以得出公式:f(n)=f(n-1)+f(n-2),类似斐波那契数列
补充:也可以用具体结果推算规律
台阶 跳法
1 1
2 2
3 3
4 5
5 8
6 13
7 21
8 34
... ...
规律:前两位的和等于后面的数,属于斐波那契数列
方法1(递归):
def fibo(n):
if n==1 or n==2:
return n
return fibo(n-1) + fibo(n-2)
if __name__ == "__main__":
print(fibo(8)) # 输出34
方法2(循环代替递归):
def fibo(n):
if n==1 or n==2:
return n
a, b = 1, 2
for i in range(3,n+1):
a, b = b, a+b # 组合进行循环(如:2,3 = 3,5;3,5 = 5,8; ...)
return b
if __name__ == "__main__":
print(fibo(8)) # 输出34
本人尽量用最简单的语言表达出来这题的思路,希望大家能看的明白,不清楚的或者写的不对的地方,希望评论交流!