漏气的嘟嘟君 发表于 2020-6-20 23:49:35

关于递归函数

求大佬帮分析下:
def fn(n):
    print("现在是第",n,"层递归")
    if n >= 3:
      return
    fn(n+1)
    print("递归的第",n,"层结束")
fn(1)
print("程序结束,回到主程序")

运行结果:
现在是第 1 层递归
现在是第 2 层递归
现在是第 3 层递归
递归的第 2 层结束
递归的第 1 层结束
程序结束,回到主程序

问题来了,
递归的第 2 层结束
递归的第 1 层结束
是怎么运行的

java2python 发表于 2020-6-20 23:55:31

听别人解释,不如自己调试
特朗普说:没有比我更懂递归。。。

java2python 发表于 2020-6-20 23:56:19

听别人解释,真的不如自己调试一下看一看

Twilight6 发表于 2020-6-20 23:56:39

本帖最后由 Twilight6 于 2020-6-20 23:58 编辑


写在注释里了:


def fn(n):
    # 开始时候 n = 1
    # 第一次递归 n = 2
    # 第二次递归 n = 3
   
    print("现在是第",n,"层递归")
    # n = 1 第一次打印
    # n = 2 第二次打印
    # n = 3 第三次打印
   
    if n >= 3:
      # n = 1 不符合 if 条件跳过
      # n = 2 不符合 if 条件跳过
      # n = 3 符合条件 执行 if 代码块
      return
      # 执行到 return 递归开始返回 顺序是:
      #   fn(3)->fn(2)->fn(1)
         
    fn(n+1)
    # 第一次 n = 1 运行到此处 fn(1+1) = fn(2) 进入第一次递归
    # 第二次 n = 2 运行到此处 fn(2+1) = fn(3) 进入第二次递归
   
    print("递归的第",n,"层结束")
    # fn(2)递归 打印
    # fn(1)递归 打印
   
   
fn(1)
print("程序结束,回到主程序")

漏气的嘟嘟君 发表于 2020-6-21 00:11:57

仔细想了下,可以这样分解:
f(1):
print1开始
f(2)
print1结束

当运行f(2)时
f(2):
print2开始
f(3)
print2结束
当运行f(3)时
f(3):
print3开始
满足if条件,return,结束f(3)
所以接下来就是打印print2结束,之后f(2)运行结束,跟着print1结束

页: [1]
查看完整版本: 关于递归函数