同样的逻辑,当在结果之上再执行此逻辑,即可用递归。
- 必须有明确终止条件
- 每次执行,问题规模都应该减少
- 递归效率不高,层数多比较占内存,函数调用是通过栈实现
先吃梨子
def func(num): print(num) if num > 0: num=int(num/2) func(num) func(10)
Python限制递归层数为1000,没个递归都会消耗一定内存
查看最大限制:
import sys print(sys.getrecursionlimit())
递归退出分析
递归退出是从最底层开始退出
def func(num): print(num) if num > 0: num=int(num/2) func(num) #验证推出层级 print(num) func(10)
递归返回值
给一个数字,除5次,无返回值方式
def calc(n,c): print(n,c) if c < 5: n=int(n/2) c+=1 calc(n,c) calc(100,0)
获取返回值,上一层拿到下一层结果
def calc(n,c): if c < 5: n=int(n/2) c+=1 #返回执行结果到上一层,无该return则最底层返回到上一层,但上一层无法返回给它的上一层 return calc(n,c) else: #返回最底层执行结果 return n