【发布时间】:2021-11-28 18:40:02
【问题描述】:
对编码非常陌生,尤其是函数。我正在尝试创建一个递归函数,它从n == 1 开始,将n 除以二,然后继续将下一个数字除以二。数学方法是fn = fn-1/2。代码如下
def half(n):
return half(n/2)
half(1)
但我不断收到“超出最大递归深度”
请帮忙?
【问题讨论】:
-
递归函数需要某种基本情况,因此您不会永远递归调用该函数。这应该什么时候停止?连续跳水 2 的极限是零,但你永远不会到达那里(见Zeno's paradox)。
-
half()调用half()调用half()等等,直到永远。您需要在代码中设置一个返回实际值的条件,而不是再次递归调用自身。 -
你也许应该先在纸上设计这样的东西,然后考虑一下,然后再把它写成代码;如果你把它写在纸上,很明显它永远不会结束。它将永远像
half(1)、half(0.5)、half(0.25)、half(0.125)、half(0.0625)等等(理论上,实际上它会达到最大递归深度)。为什么不呢? -
是的,这是有道理的。教授给我的指示并没有警告这将是 python 中的一个问题。我设置了一个条件,一旦 n