2017-09-03 13 views
0
const factorial = (n) => { 

return innerFactorial(n, 1); 

function innerFactorial (x, y) { 
if (x == 1) { 
    return y; 
} 
else { 
    return innerFactorial(x-1, x * y); 
}} } 

factorial(4) 
/=> 24 

4がnとして使用され、yが1でなければならないとしたら、内部要因パラメータは4-1,4回1でなければならないので、4回1回、3回1回、2回1倍、1倍、1倍、10倍ですが、それは24に等しくなります。誰かがこの機能を説明できますか?これはEcsmascript 6この機能はなぜ24に表示されますか?

答えて

0

あなたは乗算に値を表示機能、上の本からあるので、4 * 3 * 2 * 1 = 24

0

STEP 1

factorial(4) = innerFactorial(4,1) = innerFactorial(4-1,4*1) = innerFactorial(3,4) = 012

STEP 2

= innerFactorial(2,12)

STEP 3

innerFactorial(2,12) = innerFactorial(2-1,12*2) = innerFactorial(1,24)

STEP 4

innerFactorial(1,24) = 24

0

これは、各recursivに戻されているものですEループ:

return innerFactorial(4-1, 4 * 1); 
... 
return innerFactorial(3-1, 3 * 4); 
... 
return innerFactorial(2-1, 2 * 12); 
... 
return 24; 
0

ただ、何が起こるかを見るためにループを歩く:

innerFactorial(4, 1) 

これはにつながる:

につながる
innerFactorial(4-1, 4*1) // innerFactorial(3, 4) 

:次に

innerFactorial(3-1, 3*4) // innerFactorial(2, 12) 

innerFactorial(2-1, 2*12) // innerFactorial(1, 24) 

Finnalyは、x==1であるため、これはy(24)を返します。これは、階乗を計算する正しい方法です。

0
Factorial(4) 
=> innerFactorial(4, 1) 
=> innerFactorial(4-1, 4 * 1); 
=> innerFactorial(3, 4); 
=> innerFactorial(3-1, 3 * 4); 
=> innerFactorial(2, 12); 
=> innerFactorial(2-1, 2 * 12); 
=> innerFactorial(1, 24); 
=> 24 // if the first param is 1, return 24 
関連する問題