Рекурсивные функции в JavaScript - PullRequest
1 голос
/ 03 апреля 2012

Пожалуйста, помогите мне понять эту рекурсивную функцию ...

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 ]

2 голосов
/ 03 апреля 2012

Какой? Это называется дважды. Но каждый раз он либо получает значение, которое существует в массиве с индексом, равным текущему значению exponent-1, либо устанавливает это значение.

Это просто индекс массива и доступ.

1 голос
/ 11 марта 2013

посмотрите на эту версию!

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

может сделать это короче?

1 голос
/ 03 апреля 2012

Я сделал консольный журнал стека [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
1 голос
/ 03 апреля 2012

Алгоритм: стек результат каждой степени от начального показателя до 0.

Если вы запустите power(2, 3), стек в какой-то момент будет:

stack[2] = 8
stack[1] = 4
stack[0] = 2

Это действительно не имеет ничего общего с математической концепцией власти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...