Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建的函数不';t工作(Python)_Python_Math_Modular Arithmetic_Ceil - Fatal编程技术网

创建的函数不';t工作(Python)

创建的函数不';t工作(Python),python,math,modular-arithmetic,ceil,Python,Math,Modular Arithmetic,Ceil,我对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

我对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而不退出

如果n
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))
导入数学
从数学导入单元
def SBSeq(n):

如果n,下面问题的OP与您的问题相同。请检查:您的代码甚至无法编译。请发布一些有效的代码。我猜函数是用负输入调用的,对于负输入,没有提前退出条件,
ceil(n/2)-1
看起来可疑。请注意,
0*某些函数()
不会对0短路。@Borja我确实检查过了,它没有和我一样的问题。我正在序列中生成一个特定的术语,而他/她正在生成一个列表。@juanchopanza它确实可以编译(无论如何,在Python 2.7.9中)。我没有把版本放进去。。。很抱歉
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))