2014 dxdy logo

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

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




 
 Ошибка «Maximum call stack size exceeded»
Сообщение16.07.2018, 09:30 
Аватара пользователя
Пишу процедуру, вычисляющую факториал заданной кратности (кажется, его называют мультифакториал или кратный факториал) для натурального числа (например, тройной факториал числа 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»
Сообщение16.07.2018, 10:00 
Ktina в сообщении #1326995 писал(а):
mulfac(num-mul)
Вот поэтому

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

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

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

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


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

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

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

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

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

-- 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