Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2008, 03:35   #1
lexus_ilia
Студентик :)
Пользователь
 
Аватар для lexus_ilia
 
Регистрация: 29.09.2008
Сообщений: 84
По умолчанию Функция Аккермана.

Разработать рекурсивную функцию нахождения значения функции Аккермана, которая определяется для всех неотрицательных целых аргументов m и n следующим образом:
А(0,n)=n+1;
A(m,0)=A(m-1,1), если (m>0);
A(m,n)=A(m-1,A(m,n-1)), если (m, n >0).
я решил написать так:
Код:
Program laba11a;
uses
 crt;
Var
 k,l,F:extended;
function akker(m,n:extended):extended;
begin
 if m=0 then
  akker:=n+1;
 if (m>0) and (n=0) then
  akker:=akker(m-1,1);
 if (m>0) and (n>0) then
  akker:=akker(m-1,akker(m,n-1));
end;
begin
 clrscr;
 Writeln('BBedute m u n');
 Write('m=');
 Readln(k);
 Write('n=');
 Readln(l);
 F:=akker(k,l);
 Writeln('FyHkcu9 =' ,F);
 readkey;
end.
Теперь появился вопрос как переделать её, что-бы не было переполнения стека, например при значении m=4 и n=4? я понимаю что надо делать как-то ссылки на значения, а не сами значения использовать, но просто интересно стало а как это реализовать?
lexus_ilia вне форума Ответить с цитированием
Старый 08.10.2008, 23:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы будете смеяться, но Вы всё сделали правильно!
Это функция такая "плохая"... :-(((


http://www.mgopu.ru/PVU/2.1/Recurs/B...2/fun_akkr.htm

Функция Аккермана — Википедия

Функция Аккермана - Программирование Форум на SQL_RU
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2008, 02:21   #3
lexus_ilia
Студентик :)
Пользователь
 
Аватар для lexus_ilia
 
Регистрация: 29.09.2008
Сообщений: 84
По умолчанию

Да дело не в этом, я это всё уже читал, прежде чем делать лабу, вопрос у меня прост, можно ли как-нибудь при помощи Паскаля реализовать подсчёт функции Аккремана для 4,4 избежав переполнения стека?
lexus_ilia вне форума Ответить с цитированием
Старый 09.10.2008, 03:41   #4
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

Моңет попробовать У К А З А Т Е Л И?
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 11.04.2010, 16:15   #5
Studentka_iz_ZP
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 15
По умолчанию

Подскажите, а как в этой программе добавить ещё и вывод значений функции?
Studentka_iz_ZP вне форума Ответить с цитированием
Старый 11.04.2010, 16:23   #6
Google2010
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 316
По умолчанию

Цитата:
вывод значений функции
Код:
Writeln('FyHkcu9 =' ,F);
-а это что?
Google2010 вне форума Ответить с цитированием
Старый 11.04.2010, 16:31   #7
Studentka_iz_ZP
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 15
По умолчанию

вот так
Изображения
Тип файла: jpg image006.jpg (4.3 Кб, 115 просмотров)
Studentka_iz_ZP вне форума Ответить с цитированием
Старый 11.04.2010, 17:03   #8
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

http://forum.sources.ru/index.php?sh...1&view=showall
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 12.04.2010, 17:26   #9
Studentka_iz_ZP
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 15
По умолчанию

спасибо я это уже видела.
там другой текст программы.
а как для этого кода сделать вывод значений?
Studentka_iz_ZP вне форума Ответить с цитированием
Старый 12.04.2010, 18:13   #10
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Прога неверно считает значения.
Код:
function akker(m,n:extended):extended;
begin
 if m=0 then
  akker:=n+1;
 if (m>0) and (n=0) then
  akker:=akker(m-1,1);
 if (m>0) and (n>0) then
  akker:=akker(m-1,akker(m,n-1));
write(' ',m,n); {Вот здесь добавил}
end;
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция Sam04 Помощь студентам 1 11.09.2008 13:51
Функция ZiLi Microsoft Office Excel 1 05.09.2008 18:37
функция sergei64_89 Общие вопросы C/C++ 2 25.05.2008 16:48
Функция... Sota Помощь студентам 5 24.05.2008 22:19
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50