鱼C论坛

 找回密码
 立即注册
查看: 2445|回复: 6

请教这两个递归函数的区别

[复制链接]
发表于 2016-2-20 15:40:07 | 显示全部楼层 |阅读模式

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

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

x
def f1(x):
    if x > 0:
        print(x)
        f1(x-1)

def f2(x):
    while x > 0:
        print(x)
        f2(x-1)

f1 没问题,为什么 f2 会进入到死循环呢?比如 f2(5),5,4, 3, 2, 都可以顺利打印出来,但是当 x 到了 1 以后,就进入死循环。请大家指教,谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-20 17:04:46 | 显示全部楼层
当x=1时,进入那个while循环,pirnt(1) 以后执行  f2(0) 这个不满足while的条件就不执行了,但是你上一个x=1时候的while循环还没结束呢,就继续执行,相当于又把x=1那个循环执行了一遍,然后就重复了,所以会出现死循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-20 18:15:56 | 显示全部楼层
本帖最后由 小小大鱼 于 2016-2-20 18:17 编辑
  1. def f2(x):
  2.     while x > 0:
  3.         print(x)
  4.         f2(x-1)
复制代码

当第一次x=5时,相当于
  1. def f2(x):
  2.     while True:# x > 0 为True
  3.         print(x)
  4.         f2(x-1)
复制代码

一直递减,直到x=1,后面执行的相当于
  1. def f2(1):
  2.     while True:
  3.         print(1)
  4.         f2(0)#这里不成立,不再调用函数本身了
复制代码

后面就成了这样了:
  1. while True:
  2.         print(1)
复制代码

根本原因在于while True本身就是个无限循环,因为你没有结束条件。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +1 收起 理由
hldh214 + 5 + 5 + 1 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-21 06:35:03 | 显示全部楼层
小小大鱼 发表于 2016-2-20 18:15
当第一次x=5时,相当于

一直递减,直到x=1,后面执行的相当于

非常感谢热心的指教!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-21 06:36:01 | 显示全部楼层
shuofxz 发表于 2016-2-20 17:04
当x=1时,进入那个while循环,pirnt(1) 以后执行  f2(0) 这个不满足while的条件就不执行了,但是你上一个x= ...

非常感谢热心的指教!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 12:30:27 | 显示全部楼层
while(1)==while(True)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 21:55:35 | 显示全部楼层
这个很简单啊  你跟着定义走   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-19 18:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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