Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 16.02.2014
Сообщений: 35
1

Реализовать рекурсивный алгоритм вычисления функции Аккермана

25.02.2014, 18:41. Показов 5037. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужна помощь! Реализовать рекурсивный алгоритм вычисления функции Анкермана. Вычислить
глубину рекурсии.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2014, 18:41
Ответы с готовыми решениями:

Реализовать рекурсивный алгоритм вычисления значения функции
Нужно реализовать рекурсивные функции по следующим задачкам: 2.Алгоритм вычисления значения...

Разработать рекурсивный метод, возвращающий значение функции Аккермана для неотрицательных чисел n и m
Разработать рекурсивный метод, возвращающий значение функции Аккермана для неотрицательных чисел n...

Реализовать алгоритм вычисления значения функции F(n)
Алгоритм вычисления значения функции F(n),где n– натуральное число, задан следующим соотношениями:...

Рекурсивный алгоритм вычисления по формуле
Помогите, пожалуйста, нужно реализовать рекурсивный алгоритм вычисления для данной формулы. У меня...

11
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
25.02.2014, 18:54 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
 
namespace ConsoleApplication
{
    class Program
    {
        public static int Depth = 0;
        public static UInt64 AckermannFunc(UInt64 m, UInt64 n) {
            Depth++;
            if (m == 0)
                return n + 1;
            if (m > 0)
                if (n == 0)
                    return AckermannFunc(m - 1, 1);
            return AckermannFunc(m - 1, AckermannFunc(m, n - 1));
        }
        
        public static void Main(string[] args) {
            Console.WriteLine(AckermannFunc(3, 5));
            Console.WriteLine(Depth);
        }
    }
}
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.02.2014, 21:10 3
tezaurismosis, только вместо двух вложенных if'ов лучше же использовать &&
2
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
26.02.2014, 08:12 4
if (m > 0)
вроде можно вообще не использовать.
2
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
26.02.2014, 12:40 5
Итак, по сумме правок
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
 
namespace ConsoleApp
{
    class Program
    {
        public static int Depth = 0;
        public static UInt64 AckermannFunc(UInt64 m, UInt64 n) {
            Depth++;
            if (m == 0)
                return n + 1;
            if (n == 0)
                return AckermannFunc(m - 1, 1);
            return AckermannFunc(m - 1, AckermannFunc(m, n - 1));
        }
 
        static void Main(string[] args) {
            Console.WriteLine(AckermannFunc(3, 5));
            Console.WriteLine(Depth);
        }
    }
}
Печаль, но StackOverflowException не обрабатывается - приложение падает даже с обработкой исключения.
А(4, 1) уже вызывает StackOverflow
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 12:46 6
tezaurismosis, Что-то слабенький у вас комп.
Реализовать рекурсивный алгоритм вычисления функции Аккермана

И да, вызвал еще с аргументами 3000 и 9000 - упал с SO, не знаю, почему у вас по-другому:
1
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
26.02.2014, 14:29 7
Psilon, на A(3, 9) и у меня сработало
A(3, 9) = 4093
A(3, 10) = 8189; Depth = 44698325
A(3, 11) -> SO
A(2, 6700) -> 13403; Depth = 89826905
A(2, 6800) -> SO
A(4, 1) = 65533 (по Википедии, у меня SO)

Не по теме:

А комп действительно слабенький по современным меркам - ноутбук Acer Aspire 5253G, 2GB RAM, CPU AMD E-350 2x1,6 GHz

1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 14:43 8
tezaurismosis, у меня только 3-11 еще считает, 3-12 или 4-1 уже валится
core i7-3615qm, 8gbram
1
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
26.02.2014, 15:20 9
Psilon, мне интересно время для A(2, 6700) на твоём компе - у меня Stopwatchем вышло 00:00:06.0195512
Раз уж начали сравнивать
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 15:58 10
any cpu release
Миниатюры
Реализовать рекурсивный алгоритм вычисления функции Аккермана  
2
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 15:59 11
Если скомпилировать жестко под х86, то 00:00:00.7113168
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
26.02.2014, 16:18 12
Psilon, ух, быстро.
0
26.02.2014, 16:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2014, 16:18
Помогаю со студенческими работами здесь

Реализуйте рекурсивный алгоритм вычисления многочлена
Здравствуйте. Помогите с решением задачи на рекурсивные функции. Слабо понимаю, как все это должно...

Реализовать рекурсивный алгоритм возведения в степень.
Реализовать рекурсивный алгоритм возведения в степень. Учесть все возможные случаи. Вычислить...

Реализовать рекурсивный алгоритм вычисления функции Аккермана
Реализовать рекурсивный алгоритм вычисления функции Аккермана. Вычислить глубину рекурсии.

Реализовать рекурсивный алгоритм вычисления функции Анкермана
Реализовать рекурсивный алгоритм вычисления функции Анкермана. Вычислить глубину рекурсии.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru