Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2013, 20:19
Аватар для helpmepls
Интересующийся
Отправить личное сообщение для helpmepls Посмотреть профиль Найти все сообщения от helpmepls
 
Регистрация: 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) );
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2013, 20:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

helpmepls,
function num(n)
{
return (n+"").length
}
alert( num(223) );

Последний раз редактировалось рони, 20.03.2013 в 21:02.
Ответить с цитированием
  #3 (permalink)  
Старый 20.03.2013, 21:02
Аспирант
Отправить личное сообщение для ILL-JAH Посмотреть профиль Найти все сообщения от ILL-JAH
 
Регистрация: 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));
Ответить с цитированием
  #4 (permalink)  
Старый 21.03.2013, 11:11
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Очередная задача из горе-учебника на применение рекурсии там, где ее применять не следует?
helpmepls,
Вы, при рекурсивном вызове передаете два параметра, а используется только один, как оно может работать "правильно"?
Также не понятно, вы хотите чтобы можно было передавать отрицательные числа? Если да, вы подумали как будет функция работать в этом случае? Бесконечная рекурсия не получится? А если нет, зачем проверка n >= 0 ?
Вот вам в том же духе (т.е. с теми же недочетами):
function num(n)
{
  return ( n >= 0 && n < 10 ) ? 1 : num(n/10)+1;
}
Ответить с цитированием
  #5 (permalink)  
Старый 25.03.2013, 23:25
Аватар для helpmepls
Интересующийся
Отправить личное сообщение для helpmepls Посмотреть профиль Найти все сообщения от helpmepls
 
Регистрация: 01.03.2013
Сообщений: 12

Сообщение от рони Посмотреть сообщение
helpmepls,
function num(n)
{
return (n+"").length
}
alert( num(223) );
Благодарю за ответ.

Я правильно понимаю, что
return (n+"").length
преобразует переменную n в строковой тип и позволяет применять к ней свойство length?
Ответить с цитированием
  #6 (permalink)  
Старый 25.03.2013, 23:26
Аватар для helpmepls
Интересующийся
Отправить личное сообщение для helpmepls Посмотреть профиль Найти все сообщения от helpmepls
 
Регистрация: 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));
Нет, я имел ввиду подсчет кол-ва цифр в переменной.
Ответить с цитированием
  #7 (permalink)  
Старый 25.03.2013, 23:43
Аватар для helpmepls
Интересующийся
Отправить личное сообщение для helpmepls Посмотреть профиль Найти все сообщения от helpmepls
 
Регистрация: 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.
Что я упустил?
Ответить с цитированием
  #8 (permalink)  
Старый 26.03.2013, 12:13
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Дзен-трансгуманист,
Если используется replace для удаления точки, то почему бы заодно не удалить и знак, чтобы сэкономить на вызове abs?
return isFinite( number ) ? ( number+'' ).replace( /[.-]/g, '' ).length : 0;
helpmepls,
Конкретизируйте задачу, во-первых, правильно ли я предположил, что по условию требуется написать именно рекурсивную функцию? Во-вторых, числа только целые, или могут быть и дробные? Если второе, то нужно кол-во цифр только в целой части или и в целой и в дробной?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод переменной fAmOus Элементы интерфейса 5 18.08.2012 19:47
Вывод переменной содержащей таблицу Elve Элементы интерфейса 5 25.07.2012 14:57
Вывод html тегов с переменной Eser Общие вопросы Javascript 3 04.07.2012 16:04
Вывод переменной из jQuery.ajax() frolvict jQuery 3 09.03.2012 21:39
Вывод переменных MasterHrust Javascript под браузер 4 03.08.2011 15:41