创建的函数不起作用 (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))
我对 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))