python程序使用递归查找数字是偶数还是奇数

时间:2013-11-21 18:31:03

标签: python recursion

所以我想通过使用递归函数找到偶数,该函数重复从数字中减去2以找到它是否是偶数。 到目前为止,我的功能是

def isEven(number):
   if number!=0:
     return(n-2)
   while number =<2:
     if number==2:
        print("NUmber is even")
     else:
        print("number is odd")

这个功能不起作用可以帮助我解决它

3 个答案:

答案 0 :(得分:3)

递归实现如下所示:

def isEven(number):
    if number < 2:
        return number % 2 == 0
    return isEven(number - 2)

输出:

>>> isEven(3)
False
>>> isEven(2)
True

您的函数不会调用自身,因此不使用递归。一个while循环将用于非递归函数,因为循环将重复从数字中减去2。

上面给出的函数检查数字是否小于2然后输出答案(number % 2 == 0表示:除以2后的余数是否等于零?)。如果数字大于2,我们递归调用isEven,其数字越小(number - 2)。这意味着我们会以较小的数字反复拨打isEven,直到该号码小于2.

答案 1 :(得分:3)

这是相互递归函数的经典示例:

def even(number):
    if number == 0:
        return True
    return odd(number - 1)

def odd(number):
    if number == 0:
        return False
    return even(number - 1)

def isEven(number):
    if even(number):
        print("Number is even")
    else:
        print("Number is odd")

答案 2 :(得分:1)

def isEven(x):
    if x == 0:
        return True
    elif x == 1:
        return False
    else:
        return not isEven(x-1)

请勿尝试对大于994或小于0的数字执行此操作!

说明:

您不能在小于零的任何数字上调用函数,因为任何非0或1的输入都会导致在较小的数字上调用该函数。如果函数的第一次调用是负数,从中减去一个显然永远不会导致它为0或1,所以函数将无休止地调用自身,递归等效于无限循环。但是,您可以修改此功能以使其适用于负输入 - 这是留给读者的练习!

您不能在大于994的数字(或其附近(或更确切地说,数字大于,等于或略小于递归深度)上调用它),因为它会导致StackOverflow错误(描述为{ {1}})。要理解这意味着什么,你需要理解递归(为了理解递归,你需要理解递归,就像旧的笑话一样)。或者您可以查看有用的资源,例如thisthis