创建的功能不起作用(Python)

时间:2015-07-03 07:05:07

标签: 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 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))

任何帮助将不胜感激!

3 个答案:

答案 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))