千里ち*_*ちゃん 2 javascript recursion logic return-value exponential
因为幂(base,exponent)没有返回值,除非指数为0,最初,不应该为power(base,exponent -1)返回'undefined',因此最初是不可复制的?因此,我无法遵循此代码的逻辑.为什么/如何运作?
function power(base, exponent) {
if (exponent == 0)
return 1;
else
return base * power(base, exponent - 1);
}
Run Code Online (Sandbox Code Playgroud)
看看如果你试图计算会发生什么5^3:
power(5, 3) ... this should give us 125, let's see if it does...
function power(base, exponent) { // base = 5, exponent = 3
if (exponent == 0) // nope, exponent != 0
return 1;
else
return base * power(base, exponent - 1); // return 5 * power(5, 2)
}
Run Code Online (Sandbox Code Playgroud)
......是什么power(5, 2)?...
function power(base, exponent) { // base = 5, exponent = 2
if (exponent == 0) // nope, exponent != 0
return 1;
else
return base * power(base, exponent - 1); // return 5 * power(5, 1)
}
Run Code Online (Sandbox Code Playgroud)
......是什么power(5, 1)?...
function power(base, exponent) { // base = 5, exponent = 1
if (exponent == 0) // nope, exponent != 0
return 1;
else
return base * power(base, exponent - 1); // return 5 * power(5, 0)
}
Run Code Online (Sandbox Code Playgroud)
......是什么power(5, 0)?...
function power(base, exponent) { // base = 5, exponent = 0
if (exponent == 0) // yup, exponent != 0
return 1; // return 1
else
return base * power(base, exponent - 1);
}
Run Code Online (Sandbox Code Playgroud)
......当我们走回堆栈时,将它们放在一起,按相反的顺序排列......
power(5, 0) = returns 1
power(5, 1) = 5 * power(5, 0) = 5 * 1 = returns 5
power(5, 2) = 5 * power(5, 1) = 5 * 5 = returns 25
power(5, 3) = 5 * power(5, 2) = 5 * 25 = returns 125
... so, power(5, 3) returns 125, as it should.
Run Code Online (Sandbox Code Playgroud)
可能更简洁:
function power(base, exponent) {
return exponent == 0? 1 : base * power(base, --exponent);
}
Run Code Online (Sandbox Code Playgroud)
但是,迭代解决方案的速度要快得多:
function powerNR(base, exp) {
var result = 1;
while(exp--) {
result *= base;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10010 次 |
| 最近记录: |