鱼C论坛

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

[已解决]为何会出现循环打印:“输入错误”

[复制链接]
发表于 2021-11-7 16:51:09 | 显示全部楼层 |阅读模式

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

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

x
新手,菜鸟,害羞,如题:
python旧版第23、24讲课后习题第三题,为何会出现循环打印:“输入错误”。
自己写的代码,我没有使用循环啊,为何会频繁打印“输入错误”。
def nianling(n):
    if n<=0:
        print("输入错误!")
    if n==1:
        return 10
    else:
        return nianling(n-1) + 2
number=int(input("请输入人数:"))
result=nianling(number)

if number>=0:
    print("最后一个人的年纪为:%d" % result)
最佳答案
2021-11-7 18:11:05
本帖最后由 jackz007 于 2021-11-7 18:25 编辑

      关注这个函数
def nianling(n):
    if n <= 0:
        print("输入错误!")           # n <= 0 时执行这里
    if n == 1 :
        return 10
    else :                          # 只要 n 不等于 1 都递归,问题就出在这里,当 n <= 0 时,会陷入无底递归。
        return nianling(n - 1) + 2
        正常递归在 n = 1 时到底,所以,在递归的过程中,绝对不可能出现 n 小于 1 的情形,n <  1  的唯一可能只能是用这个 n 调用了函数。所以,避免这个问题的方法,是不要用小于 1 的 n 调用函数。
        让这个函数具备广泛的适用性,这个函数应该这么修改:
def nianling(n):
    r = 10
    if n > 0:
        if n > 1:                     # 只有确定 n > 1 才递归 
            r = nianling(n - 1) + 2
    else:
        print("输入错误!")
        r = n
    return r
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-7 17:40:21 | 显示全部楼层
我运行你的代码没有问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-7 18:11:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-11-7 18:25 编辑

      关注这个函数
def nianling(n):
    if n <= 0:
        print("输入错误!")           # n <= 0 时执行这里
    if n == 1 :
        return 10
    else :                          # 只要 n 不等于 1 都递归,问题就出在这里,当 n <= 0 时,会陷入无底递归。
        return nianling(n - 1) + 2
        正常递归在 n = 1 时到底,所以,在递归的过程中,绝对不可能出现 n 小于 1 的情形,n <  1  的唯一可能只能是用这个 n 调用了函数。所以,避免这个问题的方法,是不要用小于 1 的 n 调用函数。
        让这个函数具备广泛的适用性,这个函数应该这么修改:
def nianling(n):
    r = 10
    if n > 0:
        if n > 1:                     # 只有确定 n > 1 才递归 
            r = nianling(n - 1) + 2
    else:
        print("输入错误!")
        r = n
    return r
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-7 22:37:52 | 显示全部楼层
jackz007 发表于 2021-11-7 18:11
关注这个函数

        正常递归在 n = 1 时到底,所以,在递归的过程中,绝对不可能出现 n 小于 1 ...

收到,谢谢,这个到底的知识点就没学到,唉&#128532;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-7 22:38:25 | 显示全部楼层
傻眼貓咪 发表于 2021-11-7 17:40
我运行你的代码没有问题啊

你输入0、或者-1时,就会出现问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-8 17:48:41 | 显示全部楼层
一叶无伤 发表于 2021-11-7 22:38
你输入0、或者-1时,就会出现问题了

明白了,但希望楼主下次可以详细说明问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-30 01:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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