鱼C论坛

 找回密码
 立即注册
查看: 3315|回复: 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 编辑

      关注这个函数
  1. def nianling(n):
  2.     if n <= 0:
  3.         print("输入错误!")           # n <= 0 时执行这里
  4.     if n == 1 :
  5.         return 10
  6.     else :                          # 只要 n 不等于 1 都递归,问题就出在这里,当 n <= 0 时,会陷入无底递归。
  7.         return nianling(n - 1) + 2
复制代码

        正常递归在 n = 1 时到底,所以,在递归的过程中,绝对不可能出现 n 小于 1 的情形,n <  1  的唯一可能只能是用这个 n 调用了函数。所以,避免这个问题的方法,是不要用小于 1 的 n 调用函数。
        让这个函数具备广泛的适用性,这个函数应该这么修改:
  1. def nianling(n):
  2.     r = 10
  3.     if n > 0:
  4.         if n > 1:                     # 只有确定 n > 1 才递归
  5.             r = nianling(n - 1) + 2
  6.     else:
  7.         print("输入错误!")
  8.         r = n
  9.     return r
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-7 17:40:21 | 显示全部楼层
我运行你的代码没有问题啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

      关注这个函数
  1. def nianling(n):
  2.     if n <= 0:
  3.         print("输入错误!")           # n <= 0 时执行这里
  4.     if n == 1 :
  5.         return 10
  6.     else :                          # 只要 n 不等于 1 都递归,问题就出在这里,当 n <= 0 时,会陷入无底递归。
  7.         return nianling(n - 1) + 2
复制代码

        正常递归在 n = 1 时到底,所以,在递归的过程中,绝对不可能出现 n 小于 1 的情形,n <  1  的唯一可能只能是用这个 n 调用了函数。所以,避免这个问题的方法,是不要用小于 1 的 n 调用函数。
        让这个函数具备广泛的适用性,这个函数应该这么修改:
  1. def nianling(n):
  2.     r = 10
  3.     if n > 0:
  4.         if n > 1:                     # 只有确定 n > 1 才递归
  5.             r = nianling(n - 1) + 2
  6.     else:
  7.         print("输入错误!")
  8.         r = n
  9.     return r
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

收到,谢谢,这个到底的知识点就没学到,唉&#128532;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你输入0、或者-1时,就会出现问题了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

明白了,但希望楼主下次可以详细说明问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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