Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 Ошибка «Maximum call stack size exceeded»
Аватара пользователя
Пишу процедуру, вычисляющую факториал заданной кратности (кажется, его называют мультифакториал или кратный факториал) для натурального числа (например, тройной факториал числа 16):

Используется синтаксис Javascript
function mulfac(num, mul) { // Процедура получает число и кратность нужного факториала.
  if (num <= mul)
    return num;
return mulfac(num-mul)*num;
}

console.log(mulfac(8, 1)); // В данном случае вычисляется обычный (одинарный) факториал числа 8.
 


И вот компайлер выдаёт мне ошибку: Maximum call stack size exceeded.
Что я опять делаю не так?

 Re: Ошибка «Maximum call stack size exceeded»
Ktina в сообщении #1326995 писал(а):
mulfac(num-mul)
Вот поэтому

 Re: Ошибка «Maximum call stack size exceeded»
Ktina в сообщении #1326995 писал(а):
И вот компайлер
Я бы сказал, рантаймер.
Ktina в сообщении #1326995 писал(а):
Что я опять делаю не так?
А все так. Это норма (С)

 Re: Ошибка «Maximum call stack size exceeded»
Аватара пользователя
Ktina в сообщении #1326995 писал(а):
Что я опять делаю не так?
Вы забываете, что у функции mulfac два параметра, и передаёте ей один. Заботливый интерпретатор додумывает за вас, что второе значение — undefined (обожаю такие заботливые языки!), дальше вступают в действия правила работы с этим undefined, которые ничего хорошего не сулят.

 Re: Ошибка «Maximum call stack size exceeded»
Почему не добавить console.log("" + num + ", " + mul) первой строкой? Несколько первых строк вывода

Используется синтаксис Text
8, 1
7, undefined
NaN, undefined
NaN, undefined
NaN, undefined
NaN, undefined


ответят на вопрос.

 Re: Ошибка «Maximum call stack size exceeded»
Или взять более другой язык, признав, наконец, ошибку выбора, а не оправдывать ее тьюринг-полнотой

 Re: Ошибка «Maximum call stack size exceeded»
Аватара пользователя
worm2 в сообщении #1327018 писал(а):
Вы забываете, что у функции mulfac два параметра, и передаёте ей один.

Вот из-за подобной рассеянности мне и тогда, в 2002г., так и не удалось научиться программировать :cry: Но на этот раз я не сдамся.

 Re: Ошибка «Maximum call stack size exceeded»
Аватара пользователя
Да, и спасибо всем, конечно!

-- 16.07.2018, 22:25 --

И перепишу-ка я, на всякий случай, эту процедуру, дабы правильно было:

Используется синтаксис Javascript
function mulfac(num, mul) { // Процедура получает число и кратность нужного факториала.
  if (num <= mul)
    return num;
return mulfac(num-mul, mul)*num;
}

console.log(mulfac(69, 7)); // В данном случае вычисляется семерной факториал числа 69. Ух ты, работает!
 

 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group