Показать сообщение отдельно
  #1 (permalink)  
Старый 25.05.2012, 12:27
Кандидат Javascript-наук
Отправить личное сообщение для yazonnile Посмотреть профиль Найти все сообщения от yazonnile
 
Регистрация: 25.05.2012
Сообщений: 133

Функция возведения в степень через цикл
Всем привет. Начал постигать примудрости джс.
На практике столкнулся с таким вот примером вычисления експоненты:
function exp(a, b) {
	if (b === 0) {
		return 1;
	}
	return a*exp(a, b-1);
}


Скрипт разобрал, понял Хотя вначале были сложностит с понимаем схемы, когда функция возвращает сама себя.

Попробовал переделать через обычный цикл, чтобы "закрепить", так сказать и наткнулся на проблемы.
function exp(a, b) {
	if (b === 0) {
		return 1;
	}
	for (b; b < 1; b--) {
		a = a*a;
	}
	return a;
}

Этот вариант всегда возвращет значение a, кроме когда b === 0.
То есть проверка первая работает, а вот в цикле какой-то сбой.

Чуток помучившись, все же получил результат.
function exp(a, b) {
	if (b === 0) {
		return 1;
	}
	do {
		a = a*a;
		b--;
	} while (b > 1);
	return a;
}


Но почему этот вариант работает, а предыдущий нет, так и не понял. Буду благодарен за объяснения.

Последний раз редактировалось yazonnile, 25.05.2012 в 15:32.
Ответить с цитированием