所以我想通过使用递归函数找到偶数,该函数重复从数字中减去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")
这个功能不起作用可以帮助我解决它
答案 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}})。要理解这意味着什么,你需要理解递归(为了理解递归,你需要理解递归,就像旧的笑话一样)。或者您可以查看有用的资源,例如this和this。