Здравствуйте, Федор Тюленев, Вы писали:
ФТ>В общем мне сказать больше нечего. Если будут конкретные вопросы выраженные без заиканий (уё..., го... и т.д.), то постараюсь на них ответить.
А что я делаю не так?
Пытался тут посчитать
функцию Аккерманна (одна из первых функций которые я пробую написать на языке программирования)
Эта программа говорит 4. Хотя должна говорить 61.
Действие Начало().
сбщ(Аккерманн(3, 3)).
КонецДействия.
Действие Аккерманн(м; н).
Если м = 0.
Аккерманн = н + 1.
Иначе.
Если н = 0.
Аккерманн = Аккерманн(м - 1, 1).
Иначе.
Аккерманн = Аккерманн(м - 1, Аккерманн(м, н - 1)).
КонецЕсли.
КонецЕсли.
КонецДействия.
Аналог на
немерле говорит правильно. Да еще и работает
очень быстро.
using System.Windows.Forms;
using Nemerle;
module Program
{
[Memoize]
Ackermann(m : int, n : int) : int
{
| (0, _) => n + 1;
| (_, 0) => Ackermann(m - 1, 1);
| (_, _) => Ackermann(m - 1, Ackermann(m, n - 1));
}
Main() : void
{
_ = MessageBox.Show($"$(Ackermann(3, 12))");
}
}
... << RSDN@Home 1.2.0 alpha rev. 745>>