我想写一个递归函数来拟合曲线。由于某些原因,我的结果看起来不太好,所以我把问题归结为一个简单的例子:
Number = 6
Successor = 0
def Fuction(Number, Successor):
if (Number - Successor)+1>0:
Successor += 1
Fuction(Number, Successor)
else:
return(Fuction(Number, Successor))
A = Fuction(Number, Successor)
print(f'The Successor of {Number} is {A}')
当我这样做的时候,内核就死了。我该怎么修?(我遵循awnser:为什么我的递归函数不返回(
也许是这样的?
Number = 6
Successor = 0
def Fuction(Number, Successor):
if (Number - Successor) + 1 == 0: # base case for interrupting recursion
return Successor
Successor += 1
return Fuction(Number, Successor)
A = Fuction(Number, Successor) # will be 7
print(f'The Successor of {Number} is {A}')
你也可以这样做,这更类似于你的代码示例:
def Fuction(Number, Successor):
if (Number - Successor) + 1 > 0:
Successor += 1
return Fuction(Number, Successor)
return Successor
这里的问题是递归不会终止。当Number=6
和Successor=7
、Fuction(6,7)
只是一次又一次地调用Fuction(6,7)
,直到解释器因超过其递归限制而崩溃时,就会出现此问题。我相信这是当你的内核死的时候。
这里的解决方案是为递归找到正确的基本情况,它可以在不进行另一个递归调用的情况下返回。
这是一个很好的视频,解释了如何实现递归。