Python递归函数不能正确计数零

vohkndzv  于 2023-11-20  发布在  Python
关注(0)|答案(3)|浏览(170)

下面的递归代码应该计算一个数中零的个数

  1. def re(x,ans):
  2. if x //10 == 0:
  3. return
  4. rem = x % 10
  5. if rem == 0:
  6. ans += 1
  7. re(x//10,ans)
  8. return ans
  9. print(re(2002,0))

字符串
上面的代码给出0作为答案。它不应该打印2吗?我错过了什么...

gopyfrb3

gopyfrb31#

你也可以考虑如果一个数字小于10,你有一个个位数,因此返回0,否则递归。

  1. def count0(x):
  2. return 0 if x < 10 else (x % 10 == 0) + count0(x//10)
  3. print(count0(2002))
  4. 2

字符串

uurity8g

uurity8g2#

上面代码的问题是,ans的值在re函数的每次递归调用中都没有正确更新。要解决这个问题,您需要更新ans的值,并在递归调用中将其作为参数返回。此外,在调用递归函数时,您应该包括return语句。
下面是正确的代码:

  1. def re(x, ans):
  2. if x // 10 == 0:
  3. return ans
  4. rem = x % 10
  5. if rem == 0:
  6. ans += 1
  7. return re(x // 10, ans)
  8. print(re(2002, 0))

字符串
此代码计算输入数字x中的零位数。通过调用print(re(2002, 0)),输出将为2,即数字2002中的零位数。

展开查看全部
p8h8hvxi

p8h8hvxi3#

当你递归调用时,每个递归调用必须返回它从下一层得到的值:

  1. def re(x,ans):
  2. if x //10 == 0:
  3. return ans
  4. rem = x % 10
  5. if rem == 0:
  6. ans += 1
  7. return re(x//10, ans)
  8. print(re(2002,0))

字符串
当它到达终点,电话解除,最终的答案得到补充到顶部。
在这种情况下,您甚至不需要ans参数:

  1. def re(x):
  2. if x //10 == 0:
  3. return 0
  4. rem = x % 10
  5. return re(x//10) + (rem == 0)
  6. print(re(2002))

展开查看全部

相关问题