一,认识递归函数
1,什么是递归?
递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,
否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,
直到问题无法分解为止
2,什么是递归函数:
递归函数(recursive function)是指在函数体中可以调用自己的函数
3,语法
def fn():
# ...
if condition:
# 停止自我调用
else:
fn()
# ...
4,递归函数的优点和缺点
递归函数的优点:它们可以帮助程序员在处理复杂问题时提供一种简单且易懂的解决方案。
递归函数使代码具有可读性和可重用性,
而且可以使用递归函数解决使用其他方法难以处理的问题。
递归函数的缺点: 递归函数可能会在运行时占用较多的系统资源,
因为它们需要在堆栈上存储多个函数调用
其次,递归函数可能导致代码变得不容易理解,
因为它具有一定的复杂度
说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/26/python-suan-fa-qing-wa-tiao-tai-jie-er/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: [email protected]
二,青蛙跳台阶二题目与解析
1,题目:
一只青蛙
一次可以跳上1级台阶,
也可以跳上2级,
也可以跳上3级,
……
也可以跳上n级,
那么青蛙跳到一个n级的台阶上总共有多少种跳法?
2,解析:
台阶有1级时,只有1种跳法,f(1)=1
台阶有2级时,有2种跳法:
先跳1级,后跳1次=f(1)
一次跳2级,跳法共1种,值为1
f2 = f(1)+1
台阶有3级时,有3种跳法:
先跳1级,再跳后2级: f(2)
先跳2级,后跳1次: f(1)
一下跳3级: 1
f(3) = f(2)+f(1)+1
以此类推:
f(n) = f(n-1)+f(n-2)+…+f(2)+f(1)+1
f(n-1) = f(n-2)+f(n-3)+…+f(2)+f(1)+1
两个等式相结合,
可以得到:
f(n) = 2 * f(n-1)
总结方程式:
数列的形式:
1,2,4,8,16,32,64,128,256,512…
三,编写代码
1,递归函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 递归函数 返回指定台阶数的跳法
# n: 要跳的台阶数
def jump(n):
if n < = 0 : # 值小于等于0时,返回0,递归终止
return 0
elif n = = 1 : # 值小于等于1时,返回1,递归终止
return 1
elif n = = 2 : # 值小于等于2时,返回2,递归终止
return 2
else : # 值大于2时,返回跳n-1级的跳法的2倍
return 2 * jump(n - 1 )
num = int ( input ( "请输入青蛙要跳的台阶数:" ))
print (f "跳{num}级台阶,共有跳法{jump(num)}种" )
|
运行结果:
请输入青蛙要跳的台阶数:5
跳5级台阶,共有跳法16种
2,循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 函数 返回指定台阶数的跳法
# n: 要跳的台阶数
def jump(n):
if n = = 1 :
return 1
elif n = = 2 :
return 2
pre = 2 # 前1个数是数列中第2个数字
res = 0 # 跳法的数量
for i in range ( 3 , n + 1 ): # 从第三级开始,是前面相邻数字的2倍
res = pre * 2 # 得到当前值
pre = res # 为前一个数字赋值,供下次循环
return res
num = int ( input ( "请输入青蛙要跳的台阶数:" ))
print (f "跳{num}级台阶,共有跳法{jump(num)}种" )
|
运行结果:
请输入青蛙要跳的台阶数:5
跳5级台阶,共有跳法16种