我正在编写一个程序,它必须找出一个数字是否是偶数。它需要遵循这个模板。我可以找到它是否递归地查找数字是否偶数
问问题
4184 次
5 回答
4
关键是您需要返回一个布尔值:
def isEven(num):
if (num <= 0):
return (num == 0)
return isEven(num-2)
对于较大的数字,尽管这很快超过了 Python 的默认最大递归深度。这可以通过调用sys.setrecursionlimit(n)
wheren
是您想要允许的递归调用的数量来解决。 n
反过来又受您所在平台的限制。
于 2012-11-09T03:41:34.290 回答
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)
这是一对相互递归函数的一个很好的例子。当然,这不是找到答案的最有效方法——但从学术的角度来看仍然很有趣。
于 2012-11-09T03:45:12.367 回答
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
于 2012-11-09T03:40:17.523 回答
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
免责声明:如果您提交此内容,您可能会在老师面前打勾,并被视为聪明人。
于 2012-11-09T04:24:33.287 回答
0
接受 wim 的挑战,找到一种“不同”的方式来做到这一点:原型递归模式是foo(cdr(x))
,有一个空的基本情况list
……所以让我们围绕它来写:
def isEven(num):
def isEvenLength(l):
if not l:
return True
return not isEvenLength(l[1:])
return isEvenLength(range(num))
于 2012-11-09T04:57:09.280 回答