【发布时间】: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 的数字。