【问题标题】:Getting a Recursion Error when adding digits to a number向数字添加数字时出现递归错误
【发布时间】:2020-05-16 10:34:25
【问题描述】:

我正在尝试获取一个数字,检查它是否小于四位数字,如果是则添加数字。最后,它最终会将数字返回到 2 的幂。如果我只添加一个正整数,它工作正常,但我不希望这样,因为它返回的所有数字都以相同的数字结尾。我试图在其中有一些逻辑,它获取数字的第一个和最后一个数字并将其添加到每个循环中,但随后它给了我一个递归错误,因为它超过了最大递归深度。

def func(seed):
    length = len(str(seed))
    if length < 4:
        string = str(seed)
        seed = int(string * 2 + '1')  # the '1' can be any positive integer.
        return func(seed)

    return seed ** 2

for i in range(100):
    print(func(i))

如果我要用string[0]f'{seed - 2}' 替换'1',甚至不放任何东西, 它超过了最大递归深度。 我不明白这一点,我想知道它是怎么回事。谢谢。

【问题讨论】:

  • 对不起,我不明白你到底想达到什么目的。您最好解释一下该函数的用途,因为您似乎是在将字符串添加到字符串而不对种子进行任何计算。
  • 尝试在每次调用seed 时打印,看看发生了什么。
  • 如果您以“0”开头,则添加 string[0] 会将其保留为 0,并且函数不会进行。您是否收到“0”以外的开始字符串的递归错误?
  • @DoronShevach 这是伪随机数生成器的开始,我只是遇到了递归问题。
  • 您必须确保递归调用最终产生大于 999 的数字。

标签: python loops recursion


【解决方案1】:

你说:

“1”可以是任何正整数或零。

但事实并非如此。

考虑seed 的值是否为0。然后运行该函数将导致00 在应用int 函数时再次变为0,从而导致无限循环并因此无限递归。

【讨论】:

  • 好的,谢谢。有趣的是,我已经解决了更难的问题,但我却把这样的小细节搞砸了。
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 2013-09-01
相关资源
最近更新 更多