JavaScript中的递归函数

时间:2012-04-03 11:19:11

标签: javascript function recursion

请帮我理解这个递归函数......

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]
正在做什么

4 个答案:

答案 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);
}

可以缩短它吗?