-3

我正在编写一个程序,它必须找出一个数字是否是偶数。它需要遵循这个模板。我可以找到它是否递归地查找数字是否偶数

4

5 回答 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 回答