【发布时间】:2020-09-21 04:00:29
【问题描述】:
我需要编写一个代码,该代码将采用一串数字并找到连续的 5 位数字,这将为我提供可能的最高数字(如 9328498503734,答案将是 9850374)。
x = 0
def solution(digits):
global x
if len(digits) < 5:
return x
else:
if int(digits[0:5]) > x:
x = int(digits[0:5])
solution(digits[1:])
我的想法是使用递归函数 - 检查输入的长度是否不小于 5,如果不是,则检查当前 5 位是否为最大数字。如果是这样,这个数字就变成了新的 x,并且函数被重复,但没有第一个数字,直到基本情况被遗漏。
所以我的第一个问题是如何在没有全局变量的情况下执行此操作?我听说它们被避开了,但是当我编写以前的递归代码并在该函数中使用任何变量时,它每次都会被重置。
我的下一个问题是,这个函数返回 None,我不知道为什么?另外,当我尝试在每次递归的全局 x 上放置“print (len(digit))”时,我可以看到发生了什么!它没有返回“无”,而是引发"RuntimeError: maximum recursion depth exceeded while calling a Python object",我不知道为什么?虽然,没有这个计数器,我有 None 作为回报。
那么,如何在没有全局变量的情况下执行此操作?为什么我的代码会通过简单的打印语句改变它的行为?
您的帮助将不胜感激!
编辑:好的,我得到了无,因为我试图从函数内部调用函数,但我忘记了它必须用“return”调用,而不是像那样,就像我会在函数之外那样做。
非常感谢下面的用户告诉我,我可以通过将此变量放在函数括号中来在函数中携带 ariable。我绝对不会推荐 Codecademy,因为它忽略了如此简单和重要的东西,只提供了非常基本和不完整的主题知识。我完成了他们的 Python 课程,所有练习,这就是我在这之后所知道的:/
【问题讨论】:
-
return solution(digits[1:])....而且你的代码还是有一些错误。 -
"连续 5 位数字"..."9328498503734 答案将是 9850374" 那是 7 位数字。您是说 98503 吗?
-
好的,现在当你指向它时,我想我看到了,每次迭代都会使用相同的字符串。所以我不知道该怎么做,我尝试了 digits.replace(digits[0], "") solution(digits) 但是当我添加计数器时,它表明我输入的每个递归长度都是相同的,就像 replace 没有'根本不工作:(百分百,是的