2017-12-29 23 views
-1

Pythonで再帰関数に関するいくつかのことを理解するのに少し問題があります(私は一般的に推測します)。私は答えを探してみましたが、それを探す方法もわかりませんでした。Pythonの再帰関数の戻り値

私が検索したときに、最も一般的な再帰関数の例を取る:

def sfactorr(j): 
    if j == 1: 
     return 1 
    else: 
     return j * sfactorr(j-1) 

機能が1以上であるたびに、それがJの== 1になるまで再起動しますが、それは1に当たると、いけません戻り値は1ですか?明らかにそれを実行すると、関数全体の結果が得られますが、なぜそれが完全に理解できるかはわかりません。

つまり、基本条件が戻ってきたものではなく、正しい値を返す方法はありますか?

ありがとうございました

+1

手作業で 'sfactorr(2)'を段階的に評価してみてください。 – jwodder

+1

'j == 1'をヒットした場合の戻り値は' 1'ですが、 'else'の場合は' j'でそれを掛けています。私がちょうど昨日見ていたビデオチュートリアルがあります(Javaについては、一般的な考え方はまだありません)https://youtu.be/ozmE8G6YKww – BorrajaX

+1

'関数が1より大きいときはいつでも、j == 1.''は間違っています。実際に起こっていることは ''関数が1と異なるたびに、j == 1になるまで再開します。 ' –

答えて

1

手順を完了する必要があります。

3つを関数に渡したとします。

関数が最初に実行されるとき、j> 1です。したがって、1を返す代わりに、j * [jより小さい関数で呼び出される関数)を返します。しかし、呼び出された関数が返されるまで、実際にはそれを返すことはできません。

jが1になるまでこれを続けます。これが基本条件です。 jが1のときは、その上の関数に1が返されます。

So. jは== 3以降:

(1) j == 3, returning j * the result of (2) 
(2) j ==2, returning j * the result of (3) 
(3) j == 1, returning 1 

だから、関数は(1)、(2)、(3)の順序で(3)、(2)、(1)の順序で呼び出されますが、返却されます。

(3) returns 1 
(2) takes the 1 from (1) and multiplies it by (2), resulting in 2. Then it returns that. 
(1) takes the 2 from (2) and multiplies it by 3, resulting in 6. It returns that as a final value. 

再帰的な文は、すべての関数が最後の文だけが実行されるのではなく、元の状態に戻ることを意味します。

+0

私はそれをクリアすることに感謝する。私は先に進んで、練習するまで少し練習します。 – rammpeth