鱼C论坛

 找回密码
 立即注册
查看: 1084|回复: 5

[已解决]关于递归函数

[复制链接]
发表于 2020-6-20 23:49:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

问题来了,
递归的第 2 层结束
递归的第 1 层结束
是怎么运行的
最佳答案
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("程序结束,回到主程序")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-20 23:55:31 | 显示全部楼层
听别人解释,不如自己调试
特朗普说:没有比我更懂递归。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 23:56:19 | 显示全部楼层
听别人解释,真的不如自己调试一下看一看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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("程序结束,回到主程序")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 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结束

  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 13:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表