数値が偶数かどうかを調べるプログラムを作成しています。このテンプレートに従う必要があります。数値が偶数かどうかを再帰的に調べることができます
5 に答える
重要なのは、ブール値を返す必要があるということです。
def isEven(num):
if (num <= 0):
return (num == 0)
return isEven(num-2)
数値が大きい場合、これはPythonのデフォルトの最大再帰深度をすぐに超えます。これは、許可する再帰呼び出しの数が sys.setrecursionlimit(n)
どこにあるかを呼び出すことで解決できます。次に、使用しているプラットフォームによって制限されます。n
n
これを試してください。整数値に対して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)
これは、相互再帰関数のペアの良い例です。もちろん、答えを見つけるための最も効率的な方法ではありませんが、それでも学術的な観点からは興味深いものです。
このテンプレートが役立ちます。コメント欄に記入する必要があります。あなたが質問に持っているものは機能しません-あなたは何もに渡していないの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
これを行うための「異なる」方法を見つけるために 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))
再帰の本当にばかげた使用例ですが、とにかくこれが私のバージョンです
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
免責事項:あなたがこれを提出した場合、おそらく先生に嫌悪感を抱き、頭の悪い人として出くわすでしょう.