JS: Рекурсия

LH
На сайте с 26.09.2013
Offline
89
955

function expo( num, ex ) {

if( ex === 0 ) { return true; }
else { return num * expo( num, --ex ); }
}

console.log( expo( 2, 3 ) );

Не пойму на что перемножается 2?? Ведь ожидается значение из функции, а мы ничего не отдаем;

В итоге когда ex становится === 0 возвращается true; это особенность js возвращая true возвращать результат вычисления функции??

// 2 * expo( 2, 2)

// 2 * expo( 2, 1)

// 2 * expo( 2, 0)

// return true;

Можете схематично расписать, что происходит в функции, kак рекурсивно она отрабатывается??

D
На сайте с 31.01.2017
Offline
15
#1

function expo( num, ex ) {


if( ex === 0 ) {
console.log('expo(', num, ',', ex, '), return ', 1);
return 1;
} else {
var prevEx = ex;
var resExpo = expo( num, --ex );
var res = num * resExpo;
console.log('expo(', num, ',', prevEx, '),', 'return', num, '*', resExpo, '=', res);
return res;
}
}

console.log( expo( 2, 3 ) );

Результат:

expo( 2 , 0 ), return 1
expo( 2 , 1 ), return 2 * 1 = 2
expo( 2 , 2 ), return 2 * 2 = 4
expo( 2 , 3 ), return 2 * 4 = 8
8

А лучше откройте, например в браузере, инструменты разработчика. Поставьте точку останова и понаблюдайте как происходят вызовы.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий