Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция Аккермана, Нужно решение или оптимизация 
:(
    Опции темы
ISMD
  Дата 16.4.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



Нужны два варианта решения: рекурсивный и итерационный.

1. Рекусия уже написана но очень быстро переполняется стек. Подкиньте идею оптимизации.

2. Нужно решение итерационное с помощью имитации стека массивом записей. smile

Код


function Acc(n,m : word): word;
begin
if (n=0) then Acc:=m+1 else
    begin
    if (n<>0)and(m=0) then Acc:=Acc(n-1,1);
    if (n<>0)and(m<>0) then Acc:=Acc(n-1,Acc(n,m-1));
end;


PM MAIL   Вверх
volvo877
Дата 16.4.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(ISMD @  15.4.2006,  23:51 Найти цитируемый пост)
Рекусия уже написана но очень быстро переполняется стек

На то она и функция Аккермана  smile 

Кстати, у тебя лишние проверки производятся. Можно от них избавиться:
Код

Function Acc(N, M: LongInt): LongInt;
begin
  If N = 0 then Acc := M + 1
  Else
    If M = 0 then Acc := Acc(N - 1, 1)
    Else Acc := Acc(N - 1, Acc(N, M - 1))
end;


Кстати, вот второй способ рекурсивной реализации (здесь стек будет переполняться не так быстро):
Код

Function FAcc(n, m: LongInt): Longint;
begin
  While n <> 0 Do Begin
    Dec(n);
    If m = 0 Then m := 1 Else m := FAcc(n + 1, m - 1);
  End;
  FAcc := m + 1;
end;
 
PM MAIL   Вверх
ISMD
Дата 16.4.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



Volvo877, спасибо за идейку  smile .

Интересно, что насчёт записей, статическая память по идее будет переполняться лишь немного медленнее, т. к. все переменные остаются, а исключается только адрес возврата. Но ещё саму структуру надо разработать smile. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.