请帮我理解这个递归函数......
var stack = Array;
function power(base, exponent){
if ( exponent === 0 ) {
return 1;
} else {
stack[exponent-1] = base * power(base, exponent - 1);
return stack[exponent-1];
}
}
我不明白
stack[exponent-1]
正在做什么
答案 0 :(得分:2)
哪一个?它被叫了两次。但每次它要么获得索引中数组中存在的值等于exponent-1
的当前值,要么设置该值。
这只是一个数组索引和访问。
答案 1 :(得分:1)
该算法堆叠每个幂从初始指数到0的结果。
如果你运行power(2, 3)
,那么堆栈在某些时候将是:
stack[2] = 8
stack[1] = 4
stack[0] = 2
这与权力的数学概念无关。
答案 2 :(得分:1)
我使用
进行了堆栈[exponent-1]的控制台记录var stack = Array;
function power(base, exponent){
if ( exponent === 0 ) {
return 1;
} else {
stack[exponent-1] = base * power(base, exponent - 1);
console.log(stack[exponent-1]);return stack[exponent-1];
}
}
O / P:
power(2,5)
2
4
8
16
32
因此函数类递归直到指数变为0(第n次调用),然后它将开始返回结果
first it will return 1 (because exponent is 0)
then returns 2 * 1 (return of n call)
then 2 * 2 (return of n-1 call)
then 2 * 4 (return of n-2 call) and so on
答案 3 :(得分:1)
看看这个版本!
function pow(x,n)
{
return n==0?1:n==1?x:n==2?x*x:pow(pow(x,(n-n%2)/2),2)*(n%2==0?1:x);
}
可以缩短它吗?