Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2012, 14:50
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от yazonnile
На практике столкнулся с таким вот примером вычисления експоненты:
Здесь нет экспоненты. Это возведение в степень.
Сообщение от yazonnile
Чуток помучившись, все же получил результат.
function exp(a, b) {
	if (b === 0) {
		return 1;
	}
	do {
		a = a*a;
		b--;
	} while (b > 1);
	return a;
}

alert( exp(2, 5) )
С каких это пор 2^5 = 65536?
Ответить с цитированием
  #3 (permalink)  
Старый 25.05.2012, 15:28
Кандидат Javascript-наук
Отправить личное сообщение для yazonnile Посмотреть профиль Найти все сообщения от yazonnile
 
Регистрация: 25.05.2012
Сообщений: 133

Да. Вы правы. Через do while тоже неправильно отображает..
Кто-то натолкнет на мысль?
Вроде все логично..
- Задаем функцию с двумя парамметрами.
- проверяем "b" на идентичность нулю.
- Пускаем do/while, который с каждым циклом перемножает "a" на себя же, а "b" уменьшает на единицу . Цикл работает пока "b" не станет равным нулю. После этого идет возврат "a"/

В чем моя ошибка?
Ответить с цитированием
  #4 (permalink)  
Старый 25.05.2012, 15:41
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

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

Спасибо. Последовал совету и разобрался))

function exp(a, b) {
	var i = a;
	if (b === 0) {
		return 1;
	}
	if (b === 1) {
		return a;
	}
	for (; b > 1; b--){
		i = i*a;
	}
	return i;
}
alert(exp(2,5));
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Factorial через цикл while poligon Общие вопросы Javascript 6 17.03.2012 13:17
Как часть php кода(не весь файл) подгружать через ajax/jquery? strol AJAX и COMET 0 19.02.2012 16:01
как заполнить объект через цикл? daniel20 jQuery 1 29.12.2011 11:22
цикл идет через 1н элемент розовый слоник Общие вопросы Javascript 8 07.02.2011 15:48
Установить события через цикл DjTarik Общие вопросы Javascript 4 28.04.2010 10:58