下面的递归代码应该计算一个数中零的个数
def re(x,ans): if x //10 == 0: return rem = x % 10 if rem == 0: ans += 1 re(x//10,ans) return ansprint(re(2002,0))
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吗?我错过了什么...
gopyfrb31#
你也可以考虑如果一个数字小于10,你有一个个位数,因此返回0,否则递归。
def count0(x): return 0 if x < 10 else (x % 10 == 0) + count0(x//10)print(count0(2002))2
def count0(x):
return 0 if x < 10 else (x % 10 == 0) + count0(x//10)
print(count0(2002))
2
字符串
uurity8g2#
上面代码的问题是,ans的值在re函数的每次递归调用中都没有正确更新。要解决这个问题,您需要更新ans的值,并在递归调用中将其作为参数返回。此外,在调用递归函数时,您应该包括return语句。下面是正确的代码:
ans
re
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))
def re(x, ans):
if x // 10 == 0:
return re(x // 10, ans)
print(re(2002, 0))
字符串此代码计算输入数字x中的零位数。通过调用print(re(2002, 0)),输出将为2,即数字2002中的零位数。
x
p8h8hvxi3#
当你递归调用时,每个递归调用必须返回它从下一层得到的值:
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))
return re(x//10, ans)
字符串当它到达终点,电话解除,最终的答案得到补充到顶部。在这种情况下,您甚至不需要ans参数:
def re(x): if x //10 == 0: return 0 rem = x % 10 return re(x//10) + (rem == 0)print(re(2002))
def re(x):
return 0
return re(x//10) + (rem == 0)
print(re(2002))
型
3条答案
按热度按时间gopyfrb31#
你也可以考虑如果一个数字小于10,你有一个个位数,因此返回0,否则递归。
字符串
uurity8g2#
上面代码的问题是,
ans
的值在re
函数的每次递归调用中都没有正确更新。要解决这个问题,您需要更新ans
的值,并在递归调用中将其作为参数返回。此外,在调用递归函数时,您应该包括return语句。下面是正确的代码:
字符串
此代码计算输入数字
x
中的零位数。通过调用print(re(2002, 0))
,输出将为2,即数字2002中的零位数。p8h8hvxi3#
当你递归调用时,每个递归调用必须返回它从下一层得到的值:
字符串
当它到达终点,电话解除,最终的答案得到补充到顶部。
在这种情况下,您甚至不需要
ans
参数:型