Python 3:Recursivley查找数字是否为偶数

时间:2012-11-09 03:35:12

标签: python recursion python-3.x

我正在编写一个程序,必须找到一个数字是否均匀。它需要遵循此模板。我可以让它找到一个数字是否是递归的

5 个答案:

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