私は同じことをする2つの再帰的なステートメントを持っています。最初のステートメントの仕組みを理解していますが、2番目のケースでは混乱します。この再帰文はどのように機能しますか?
1)
def recurPower(base, exp):
'''
base: int or float.
exp: int >= 0
returns: int or float, base^exp
'''
# Base case is when exp = 0
if exp <= 0:
return 1
# Otherwise, exp must be > 0, so return
# base* base^(exp-1). This is the recursive case.
return base * recurPower(base, exp - 1)
それは依然として変数「ベース」を残す自体をリコールしているが、この最初の場合は後ろ方法周りたびに乗算します。この場合
2)
def recurPowerNew(base, exp):
'''
base: int or float.
exp: int >= 0
returns: int or float; base^exp
'''
# Base case is when exp = 0
if exp <= 0:
return 1
# Recursive case 1: exp > 0 and even
elif exp % 2 == 0:
return recurPowerNew(base*base, exp/2)
# Otherwise, exp must be > 0 and odd, so use the second
# recursive case.
return base * recurPowerNew(base, exp - 1)
私はそれはそれは、でも数であればとき、作用している最初のケースのように何の変数は、ありませんどのように機能するかを理解していません数はそれだけでは常に異なるパラメータを与えているようですが、実際には "ベース"のような特定の変数に対処しません。
メソッドにボディがない場合、パラメータは値を返しますか?
'doパラメータはメソッドに本文がない場合は値を返します。 'パラメータは値を返しません。関数は –
を返します。再帰関数が返されるたびに、 、それを含むフレームを復元する'base'を実行します。 –
@ElliottFrisch申し訳ありませんが、私はまだそれを理解していません。メソッドのこの部分にはベースエリフが含まれていません。exp%2 == 0: return recurPowerNew(base * base、exp/2)毎回パラメータを変更するだけです。 – gencode