提问人:Shashank Mingwal 提问时间:11/18/2023 最后编辑:Tim RobertsShashank Mingwal 更新时间:11/18/2023 访问量:60
Python 递归函数未正确计算零
Python recursive function not counting zeros correctly
问:
下面的递归代码应该算不。数字中的零
def re(x,ans):
if x //10 == 0:
return
rem = x % 10
if rem == 0:
ans += 1
re(x//10,ans)
return ans
print(re(2002,0))
上面的代码给出了 0 作为答案。不应该打印 2 吗?我错过了什么......
答:
0赞
Tim Roberts
11/18/2023
#1
当您以递归方式调用时,每个递归调用都必须返回它从下一层获得的值:
def re(x,ans):
if x //10 == 0:
return ans
rem = x % 10
if rem == 0:
ans += 1
return re(x//10, ans)
print(re(2002,0))
当它到达终点并且呼叫展开时,最终答案会渗透到顶部。
在这种情况下,您甚至不需要参数:ans
def re(x):
if x //10 == 0:
return 0
rem = x % 10
return re(x//10) + (rem == 0)
print(re(2002))
-1赞
MuGhasemi
11/18/2023
#2
上述代码的问题在于,在函数的每个递归调用中,值未正确更新。若要解决此问题,需要更新 的值并将其作为递归调用中的参数返回。此外,在调用递归函数时,应包括 return 语句。ans
re
ans
下面是更正后的代码:
def re(x, ans):
if x // 10 == 0:
return ans
rem = x % 10
if rem == 0:
ans += 1
return re(x // 10, ans)
print(re(2002, 0))
此代码计算输入数字中的零位数。通过调用 ,输出将为 2,即数字 2002 中的零位数。x
print(re(2002, 0))
0赞
Onyambu
11/18/2023
#3
您还可以考虑,如果一个数字小于 10,则您只有一位数,因此返回 0,否则递归。这将产生以下代码
def count0(x):
return 0 if x < 10 else (x % 10 == 0) + count0(x//10)
print(count0(2002))
2
评论
return
return str(x).count)'0')
?re
count_zeros(number)
ans