0

指数を計算する再帰を使用したこの単純なコードがあります。ここで、: を除いて再帰がどのように機能するかを理解していますif exp <= 0: return 1。関数を呼び出して、5 の 2 乗を与えるとします。1 を返すと正しい値の 25 が返されますが、2 を返すと 50 が返され、3 では 75 が返されます。

これが環境内でどのように機能するかを確認するのに少し問題があります。

def recurPower(base,exp):
    if exp <= 0:
        return 1
    return base*recurPower(base,exp-1)

print str(recurPower(5,2))
4

2 に答える 2

4

質問を理解しているかどうかわかりません。基数の場合の 1 はbase^0(ゼロ以外の基数の場合) そこにあり、乗法恒等式であるため、自由に掛けることができます。

再帰を「展開」して、数値がどこに行くのかを確認するのに役立つ場合があります。

recurPower(5, 2) = 
5 * recurPower(5, 1) = 
5 * 5 * recurPower(5, 0) =
5 * 5 * 1 =
25

1 の代わりに 2 または 3 を入れると、計算しようとしている指数の 2 倍または 3 倍になります。

于 2012-10-18T03:14:25.937 に答える
2

ここで起こっていることは、そのreturn 1ステートメントによって返される値で始まる戻り値のカスケードになってしまうことです。たとえば、次のようになります。

recurPower(5,2) == 
recurPower(5,2) -> recurPower(5,1) -> recurPower(5,0)

return ステートメントは次のようになります。

1 -> (1)*5 -> (5)*5 

(チェーンをカスケードしているので、前のチェーンの逆です)。

戻り値を次のように変更すると、次の2ようになります。

2 -> (2)*5 -> (10)*5 

(チェーンをカスケードしているので、前のチェーンの逆です)。

括弧内の数値は、再帰チェーンの下位から返されます。

于 2012-10-18T03:16:00.120 に答える