编程语言
首页 > 编程语言> > 关于Python青蛙跳台阶的问题详细讲解

关于Python青蛙跳台阶的问题详细讲解

作者:互联网

Python青蛙跳台阶的问题

问题:

一只青蛙要跳上n层高的台阶,一次能跳一阶,也可以跳2阶,请问这只青蛙跳上n层高的台阶有多少种跳法?

背景知识点补充(了解)
  1. 斐波那契数列
    斐波那契数列(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,该元素为前两位的数字之和,依次往后
  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)总方法分为两种:

  1. 最后一次跳了一级台阶,这类方法共有f(n-1)种;
  2. 最后一次跳了两级台阶,这类方法共有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

本人尽量用最简单的语言表达出来这题的思路,希望大家能看的明白,不清楚的或者写的不对的地方,希望评论交流!

标签:__,return,数列,Python,青蛙,斐波,fibo,讲解,那契
来源: https://blog.csdn.net/Hello_Mr_Zheng/article/details/89286026