【问题标题】:python program to find if number is even or odd using recursionpython程序使用递归查找数字是偶数还是奇数
【发布时间】:2013-11-21 18:31:02
【问题描述】:

所以我想通过使用递归函数来找到偶数,该函数反复从数字中减去 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")

这个功能是不是不能用,可以帮我解决一下吗

【问题讨论】:

  • 嗯,有一件事是 Python 没有 when 关键字。也许你的意思是while
  • 这将永远不会正确打印一个数字是偶数,如果数字是奇数则永远不会打印。如果你有一个奇数,它应该无限递归,如果你有一个偶数,它会打印出它是奇数,因为它只有在它是 0 时才到达底部,而 0 不是 2。
  • 另外,number =&lt;2 是一个语法错误。这应该是number &lt;= 2...

标签: python recursion


【解决方案1】:

递归实现如下所示:

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后的余数是否等于0?)。如果数字大于 2,我们递归调用 isEven 并使用更小的数字 (number - 2)。这意味着我们将反复调用较小的号码isEven,直到号码小于 2。

【讨论】:

    【解决方案2】:

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

    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")
    

    【讨论】:

      【解决方案3】:
      def isEven(x):
          if x == 0:
              return True
          elif x == 1:
              return False
          else:
              return not isEven(x-1)
      

      只是不要尝试对大于 994 或小于 0 的数字执行此操作!

      解释:

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

      您不能对大于 994 的数字(或大约(或大于、等于或略小于递归深度)的数字)调用它,因为它会导致 StackOverflow 错误(描述为 RuntimeError: maximum recursion depth exceeded )。要理解这意味着什么,您需要理解递归(为了理解递归,您需要理解递归,就像老笑话所说的那样)。或者您可以查看有用的资源,例如 thisthis

      【讨论】:

        猜你喜欢
        • 2015-02-13
        • 2015-03-03
        • 2011-11-12
        • 1970-01-01
        • 2015-05-31
        • 1970-01-01
        • 2023-01-20
        • 2013-12-09
        • 1970-01-01
        相关资源
        最近更新 更多