我正在编写一个程序,必须找到一个数字是否均匀。它需要遵循此模板。我可以让它找到一个数字是否是递归的
答案 0 :(得分:4)
关键是你需要返回一个布尔值:
def isEven(num):
if (num <= 0):
return (num == 0)
return isEven(num-2)
对于较大的数字,虽然这很快超过了Python的默认最大递归深度。这可以通过调用sys.setrecursionlimit(n)
来解决,其中n
是您想要允许的递归调用的数量。 n
反过来受到您所在平台的限制。
答案 1 :(得分:4)
试试这个,它适用于0 <= n <= sys.getrecursionlimit()-2
的整数值:
def even(n):
return True if n == 0 else odd(n - 1)
def odd(n):
return False if n == 0 else even(n - 1)
这是一对相互递归函数的一个很好的例子。当然,这不是找到答案的最有效方式 - 但从学术角度来看仍然很有趣。
答案 2 :(得分:2)
此模板会有所帮助。您需要填写注释行。你在问题中所拥有的那个不起作用 - 你没有将任何内容传递给isEven
。这仅在n >= 0
时有效,否则会导致程序崩溃。如果您需要处理负数,则很容易修复。
def isEven(n):
if n == 0:
# Number is even
elif n == 1:
# Number is odd
else:
# Call the function again, but with a different n
答案 3 :(得分:0)
递归的一个非常愚蠢的用例,但无论如何这是我的版本
import random
def isEven(num):
if random.random() < 0.5:
# let's learn about recursion!
return isEven(num)
else:
# let's be sane!
return num % 2 == 0
免责声明:如果你提交了这个,你可能会勾掉老师并作为一个聪明的人来看。
答案 4 :(得分:0)
接受wim的挑战,找到一个不同的&#34;这样做的方法:原型递归模式是foo(cdr(x))
,其中空list
的基本情况......所以让我们把它写在:{/ p>
def isEven(num):
def isEvenLength(l):
if not l:
return True
return not isEvenLength(l[1:])
return isEvenLength(range(num))