《算法图解》第三章 递归

 

 

 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 无线调用栈,无线占用内存堆加。

 

 

posted @ 2022-05-13 11:51  Annuush  阅读(62)  评论(0编辑  收藏  举报