创建的函数不起作用 (Python)

Created function doesn't work (Python)

我对 python 还很陌生,我试着用它来编写一个程序来计算 Stern-Brocot 序列的第 n 项(你可以查一下,然后这就是为什么我的函数被称为 SBSeq)。由于某种原因,它不会工作,并且出现错误,如下所示:

File "C:/Python27/Factorials.py", line 6, in SBSeq
return ((n%2)*SBSeq(ceil(n/2)-1))+SBSeq(ceil(n/2))

最终会变成这样:

File "C:/Python27/Factorials.py", line 5, in SBSeq
if n == 1: return 1
RuntimeError: maximum recursion depth exceeded in cmp

这是原代码。

import math
from math import ceil

def SBSeq(n):

if n == 1: return 1
return ((n%2)*SBSeq(ceil(n/2)-1))+SBSeq(ceil(n/2))

如有任何帮助,我们将不胜感激!

假设缩进问题不是真正的问题,问题是你的数字在递归时可以达到 1 以下,然后一旦达到 1 以下(即 n 达到 0 ) ,它继续递归调用 SBSeq 而不退出。

递归函数开始的条件应该是if n <= 1 : return 1.

代码-

def SBSeq(n):
    if n <= 1: return 1
    return ((n%2)*SBSeq(ceil(n/2)-1))+SBSeq(ceil(n/2))

SBSeq(2) 调用 SBSeq(0)SBSeq(0) 调用 SBSeq(-1)SBSeq(-1) 调用 SBSeq(-1) 永远。

只需为 SBSeq(0) 添加一个特例。

从调试器可以发现,SBSeq(2)调用了SBSeq(0),然后无限调用了SBSeq(-1)。当 n 小于或等于 1 时,函数也必须终止。

这是改进后的功能:

import math
from math import ceil

def SBSeq(n):
    if n <= 1: return 1 # not n == 1
    return ((n%2)*SBSeq(ceil(n/2)-1))+SBSeq(ceil(n/2))