Рейтинг:
12
Richard MacCutchan
Это потому, что ваша рекурсия никогда не заканчивается. Вам необходимо добавить следующие изменения:
recurSum(n)
{
if (n > 0) // do nothing if n is less than 1
{
if(n == 1)
console.log(1);
else // only recurse if n is greater than 1
console.log(n + recurSum(n - 1));
}
}
[редактировать]
Приведенный выше код имеет простой недостаток. Ниже приводится правильная реализация:
function recurSum(n) {
if (n > 0) { // do nothing if n is less than 1
if (n == 1) {
return 1; // console.log(1);
}
else { // only recurse if n is greater than 1
return n + recurSum(n - 1);
}
}
}
[/редактировать]
AmitabhaGhosh123
привет,
когда я ввожу 1 в командной строке , я получаю сумму как 1, что является правильным.
Но когда я ввожу 2 или любое другое число , я получаю нижеприведенный вывод.
1
2undefined
Это не тот правильный вывод, который требуется .
Желаемый результат : он должен вывести сумму от 1 до числа, введенного в консоль.
Richard MacCutchan
Это происходит потому, что функция не возвращает свое вычисленное значение. Se мой обновленный код выше.
AmitabhaGhosh123
вышеприведенное решение не работает, когда in заменяет возврат на console.log.
Это дает мне нижеприведенный результат
3
3undefined.
Richard MacCutchan
Почему вы изменили код, чтобы он перестал работать? Рекурсивная функция должен имейте возвращаемое значение для того, чтобы правильно писать. Вы должны переместить свои команды consol.log в точку после вызова функции.
answer = recurSum(value);
console.log(answer);
AmitabhaGhosh123
я беру ввод из командной строки.
я вызываю эту функцию следующим образом.
recurSum(process.argv[2]), где process.argv[2] - это номер, заданный в командной строке.
AmitabhaGhosh123
сейчас он работает , но не суммирует ценности.
если я ввожу 2 , он печатает 21 вместо 3.
то есть нижеприведенная строка объединяет значения, а не возвращает сумму.
return (n + recurSum(n - 1)).
Richard MacCutchan
Пожалуйста, используйте Улучшить вопрос ссылка выше, и показать код, который вы сейчас используете. Код, который я опубликовал, работает правильно, и я понятия не имею, что вы изменили.
AmitabhaGhosh123
На самом деле я беру входные данные из STDIN, поэтому мне пришлось изменить их на число, прежде чем отправлять их в функцию recurSum. Теперь он работает правильно.
AmitabhaGhosh123
Еще один вопрос .
Предположим, я ввожу в терминальный узел <filename> [2,3,4]
У вас есть какие-нибудь идеи, как превратить это в массив?
Richard MacCutchan
Вам нужно будет создать массив, а затем добавить элементы один за другим, используя метод push. Javascript на самом деле не предназначен для работы в среде консольного типа, поэтому он становится довольно сложным.
Рейтинг:
0
Dave Kreskowiak
Каждая рекурсивная функция нуждается в способе "спасения". Какой-то способ определить, что он больше не должен называть себя.
Ваша функция не имеет условия спасения, поэтому она будет вызывать себя бесконечно.
Правильно сделайте отступ в вашем коде, и это стало бы очевидным. Ваш if
оператор выводит только 1 в журнал консоли, когда n == 1. Перед повторным вызовом функции нет выхода из нее.
recurSum(n)
{
if(n == 1)
console.log(1);
// See something wrong here?
console.log(n + recurSum(n - 1));
}
AmitabhaGhosh123
Привет,
Не могли бы вы также ответить на мой 2-й вопрос?
Dave Kreskowiak
Нет. Я вообще не очень много занимаюсь javascript.
Но вы можете поискать в Google "javascript read command line arguments" и "javascript parse string into array".
AmitabhaGhosh123
не могли бы вы помочь мне исправить код ?
Dave Kreskowiak
Нет. Я не буду делать за тебя домашнее задание.
Вы не научитесь тому, что вам нужно, чтобы пройти курс, и это будет думать о проблеме и алгоритме ее решения.