为何会出现循环打印:“输入错误”
新手,菜鸟,害羞,如题: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) 我运行你的代码没有问题啊 本帖最后由 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 jackz007 发表于 2021-11-7 18:11
关注这个函数
正常递归在 n = 1 时到底,所以,在递归的过程中,绝对不可能出现 n 小于 1 ...
收到,谢谢,这个到底的知识点就没学到,唉😔 傻眼貓咪 发表于 2021-11-7 17:40
我运行你的代码没有问题啊
你输入0、或者-1时,就会出现问题了 一叶无伤 发表于 2021-11-7 22:38
你输入0、或者-1时,就会出现问题了
明白了,但希望楼主下次可以详细说明问题
页:
[1]