20.03.2013, 20:19
|
|
Интересующийся
|
|
Регистрация: 01.03.2013
Сообщений: 12
|
|
Вывод кол-ва цифр в переменной
Версия с двумя папаметрами функции работает как надо, но необходимо
чтобы параметр в функции был один.
Работает НЕ корректно. В чем причина, как исправить?
function num(n)
{
var x = 0;
if (n>=0 && n<=9) {return x+1;}
res=num(n / 10, x+1);
return res;
}
alert( num(223) );
|
|
20.03.2013, 20:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
helpmepls,
function num(n)
{
return (n+"").length
}
alert( num(223) );
Последний раз редактировалось рони, 20.03.2013 в 21:02.
|
|
20.03.2013, 21:02
|
Аспирант
|
|
Регистрация: 24.03.2011
Сообщений: 93
|
|
Может ТС имел в виду такое:
var x = 0;
function num(n)
{
if (n >= 0 && n <= 9) return x++;
return num(n / 10, x++);
}
alert(num(223));
|
|
21.03.2013, 11:11
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Очередная задача из горе-учебника на применение рекурсии там, где ее применять не следует?
helpmepls,
Вы, при рекурсивном вызове передаете два параметра, а используется только один, как оно может работать "правильно"?
Также не понятно, вы хотите чтобы можно было передавать отрицательные числа? Если да, вы подумали как будет функция работать в этом случае? Бесконечная рекурсия не получится? А если нет, зачем проверка n >= 0 ?
Вот вам в том же духе (т.е. с теми же недочетами):
function num(n)
{
return ( n >= 0 && n < 10 ) ? 1 : num(n/10)+1;
}
|
|
25.03.2013, 23:25
|
|
Интересующийся
|
|
Регистрация: 01.03.2013
Сообщений: 12
|
|
Сообщение от рони
|
helpmepls,
function num(n)
{
return (n+"").length
}
alert( num(223) );
|
Благодарю за ответ.
Я правильно понимаю, что
return (n+"").length
преобразует переменную n в строковой тип и позволяет применять к ней свойство length?
|
|
25.03.2013, 23:26
|
|
Интересующийся
|
|
Регистрация: 01.03.2013
Сообщений: 12
|
|
Сообщение от ILL-JAH
|
Может ТС имел в виду такое:
var x = 0;
function num(n)
{
if (n >= 0 && n <= 9) return x++;
return num(n / 10, x++);
}
alert(num(223));
|
Нет, я имел ввиду подсчет кол-ва цифр в переменной.
|
|
25.03.2013, 23:43
|
|
Интересующийся
|
|
Регистрация: 01.03.2013
Сообщений: 12
|
|
Сообщение от rgl
|
Очередная задача из горе-учебника на применение рекурсии там, где ее применять не следует?
helpmepls,
Вы, при рекурсивном вызове передаете два параметра, а используется только один, как оно может работать "правильно"?
Также не понятно, вы хотите чтобы можно было передавать отрицательные числа? Если да, вы подумали как будет функция работать в этом случае? Бесконечная рекурсия не получится? А если нет, зачем проверка n >= 0 ?
Вот вам в том же духе (т.е. с теми же недочетами):
function num(n)
{
return ( n >= 0 && n < 10 ) ? 1 : num(n/10)+1;
}
|
Благодарю за ответ.
1. Правильно ли я понял, что чтобы включить возможно обработки отрицательных чисел, в условии должно быть n >= -10 && n < 10 ?
2. Подскажите, почему в Вашем коде если alert(num(10)); то понятно что num(10/10)+1; = 2, но например при alert(num(11)); если не использовать команд для округления числа, num(11/10)+1; = 2,1 (при -11 = 2,2).
У Вас же команд для округления не используется, но почему то получается все верно, 2.
Что я упустил?
|
|
26.03.2013, 12:13
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Дзен-трансгуманист,
Если используется replace для удаления точки, то почему бы заодно не удалить и знак, чтобы сэкономить на вызове abs?
return isFinite( number ) ? ( number+'' ).replace( /[.-]/g, '' ).length : 0;
helpmepls,
Конкретизируйте задачу, во-первых, правильно ли я предположил, что по условию требуется написать именно рекурсивную функцию? Во-вторых, числа только целые, или могут быть и дробные? Если второе, то нужно кол-во цифр только в целой части или и в целой и в дробной?
|
|
|
|