《算法图解》第三章 递归
1、递归
(1)调用函数自身
(2)每个递归函数都有两个条件:基线条件(base case:函数不再调用自己,避免无限循环【通常是数组为空或者只包含一个元素】)和递归条件(recursive case:函数调用自己)
def countdown(i): print(i) # 基线条件 if i<=0: return # 递归条件 else: countdown(i-1)
2、栈(Stack)& 调用栈(call stack)
(1)栈的两种操作:压入(插入)和弹出(删除并读取)。
(2)将函数调用涉及的所有变量的值存储到内存中。调用另一个函数时,当前函数暂停并处于未完成状态。
(3)所有函数的调用都进入调用栈。
(4)调用栈就是调用函数,每个函数调用时都是占用一定内存的,因此栈高意味着计算机存储了大量函数调用的信息。
改善方法:①重新编写代码,使用循环。②使用尾递归。
# 递归调用栈 # n!=n*(n-1)*……*1 def factorial(x): if x == 1: return x else: return x*factorial(x-1)
答案:
3.1 栈顶GREET()函数,调用栈GREET2()函数
3.2 无线调用栈,无线占用内存堆加。