下面的递归代码应该计算一个数中零的个数
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
字符串
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))
字符串此代码计算输入数字x中的零位数。通过调用print(re(2002, 0)),输出将为2,即数字2002中的零位数。
x
print(re(2002, 0))
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))
字符串当它到达终点,电话解除,最终的答案得到补充到顶部。在这种情况下,您甚至不需要ans参数:
def re(x): if x //10 == 0: return 0 rem = x % 10 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
参数:型