-3

数値が偶数かどうかを調べるプログラムを作成しています。このテンプレートに従う必要があります。数値が偶数かどうかを再帰的に調べることができます

4

5 に答える 5

4

重要なのは、ブール値を返す必要があるということです。

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

数値が大きい場合、これはPythonのデフォルトの最大再帰深度をすぐに超えます。これは、許可する再帰呼び出しの数が sys.setrecursionlimit(n)どこにあるかを呼び出すことで解決できます。次に、使用しているプラ​​ットフォームによって制限されます。nn

于 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

これを行うための「異なる」方法を見つけるために 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 に答える
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 に答える