Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.12.2016, 03:32
Новичок на форуме
Отправить личное сообщение для rexrjd Посмотреть профиль Найти все сообщения от rexrjd
 
Регистрация: 16.12.2016
Сообщений: 1

Странное поведение рекурсии
День добрый, следующая функция должна умножать цифры в числе num, если после перемножения цифр число все еще содержит более одной цифры, повторять действие. Переменная res должна показывать сколько раз функция вызывала сама себя. Не могли бы вы пояснить почему переменная res уменьшается после первого самовызова функции.
function persistence(num,res) {
	var N = String(num);
	var sum = 1;
	for(var i = 0; i<N.length; i++){
	sum = sum * Number(N.charAt(i));
	if(String(sum).length != 1)
	{

		res++;
			
		persistence(sum,res);
	}
	}	
console.log(res);
return res;
}
a = persistence(39,0);
Ответить с цитированием
  #2 (permalink)  
Старый 16.12.2016, 08:19
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,206

Сообщение от rexrjd
Не могли бы вы пояснить почему переменная res уменьшается после первого самовызова функции.
Вот тебе более наглядная иллюстрация

function persistence(num,res) {
	var N = String(num);
	var sum = 1;
	alert('start '+N);
	for(var i = 0; i<N.length; i++){
		sum = sum * Number(N.charAt(i));
		if(String(sum).length != 1)	{
			res++;
			alert('for '+res);
			persistence(sum,res);
		}
	}	
	alert('return '+res+' num= '+num);
	return res;
}
a = persistence(39,0);

Она не "уменьшается", она именно этому равна в самой первой итерации.

Если ты хочешь иметь некий счетчик, то это делается не так.
Ответить с цитированием
  #3 (permalink)  
Старый 16.12.2016, 08:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,206

rexrjd, как вариант...

function persistence(num,res) {
	var N = String(num);
	var sum = 1;
	alert(++res+'. start '+N);
	for(var i = 0; i<N.length; i++) {
		sum = sum * Number(N.charAt(i));
	};
	if (String(sum).length != 1) {
		res=persistence(sum,res);
	};
	return res;
};
a = persistence(39,0);
alert(a);
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
*ngIF странное поведение lakusha Angular.js 2 24.10.2016 18:13
Странное поведение при делегировании mcreature jQuery 3 25.05.2014 02:18
Странное поведение jQuery borodatych Javascript под браузер 5 27.02.2014 11:47
Странное поведение переменной mycoding Серверные языки и технологии 4 14.01.2011 19:18
Странное поведение replace cooli0 Общие вопросы Javascript 4 25.01.2010 17:16