我对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))
任何帮助将不胜感激!
答案 0 :(得分:2)
假设缩进问题不是一个真正的问题,问题是您的数字在递归时可以达到1
以下,然后一旦达到1
以下(即n达到{{1}它继续递归地调用SBSeq而不退出。
递归函数开始的条件应为0
。
代码 -
if n <= 1 : return 1
答案 1 :(得分:1)
ctx.textBaseline = “top”
ctx.shadowColor = “#000”
ctx.shadowOffsetX = width;
ctx.shadowOffsetY = 0;
ctx.shadowBlur = blur;
ctx.fillText(text, -width, 0);
致电SBSeq(2)
,SBSeq(0)
致电SBSeq(0)
,SBSeq(-1)
致电SBSeq(-1)
。
只需为SBSeq(-1)
添加一个特殊情况。
答案 2 :(得分: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))