我很難理解else塊。我知道它應該將基本參數提升爲指數參數。但它是如何工作的?這段代碼的else塊的邏輯是什麼?
var power = function(base, exponent){
if (exponent === 0){
return 1;
}
else{
return base * power(base, exponent - 1);
}
};
power(2, 2);
我很難理解else塊。我知道它應該將基本參數提升爲指數參數。但它是如何工作的?這段代碼的else塊的邏輯是什麼?
var power = function(base, exponent){
if (exponent === 0){
return 1;
}
else{
return base * power(base, exponent - 1);
}
};
power(2, 2);
power(base, exponent - 1)
真的只是base * power(base, exponent - 1)
。但是,如果我們一直在想什麼是那些函數調用發生的事情,我們可以看到這一點:
base * ... pow(base, exponent - n)
讓我們嘗試power(2, 4)
:
2 * (2 * (2 * (2 * (1))))
2 * power(2, 4 - 1);
power(2, 4 - 1)
簡化爲
2 * power(2, 3 - 1)
其簡化爲
2 * power(2, 2 - 1)
這簡化到
2 * power(2, 1 - 1)
和簡化爲1
因爲exponent
將0
。當我們把它放在一起,這是我們得到:
2 * 2 * 2 * 2 * 1
我不明白每次循環時力量(2,4-1)是如何達到2:/感謝您的幫助。 – RufioLJ
@RufioLJ因爲'pow(...)'表示2 * pow(...)'這意味着'2 * pow(...)'表示'1'。因此,在呼叫之前的每個2由內部呼叫的返回值進行多項疊加。返回值將是2或1(當exp === 01時最後1) – 0x499602D2
@RufioLJ我知道這很讓人困惑,但是你究竟得到了什麼? – 0x499602D2
用於將輸入power(2/*base*/,2/*exponent*/)
ITERATION 1:由於2/*exponent*/
不等於0
:該條目時,它執行else
一部分。
因此它應該返回2 * power(2,(2-1)/*which is 1*/)
迭代2:再次,有2/*base*/ and 1/*exponent*/
power(2,1)
在else
部分被執行以power()
函數的調用以參數:returns 2 * power(2,0)
ITERATION 3:再次有是power()
函數的參數2/*base*/ and 0/*exponent*/
由於指數爲0,它會執行if部分並返回1,其中 完成第二次迭代,返回2。完成第一次迭代返回4的 。
這是一個遞歸函數,調用自己與不同的參數。 –
這是遞歸的求冪運算。 * a^b = a * a ^(b-1)= a * a * a ^(b-2)= ... *我們知道* a^0 = 1 *。 – oldrinb
'Math.pow(2,2)' –