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

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

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值