Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842

Программирование рекурсий

02.03.2012, 18:12. Показов 2837. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция Аккермана. Даны неотрицательные целые числа n, m. Вычислить A(n,m), где (см рисунок)


Использовать программу, включающую рекурсивную функцию.
Миниатюры
Программирование рекурсий  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2012, 18:12
Ответы с готовыми решениями:

Программирование рекурсий.
Здравствуйте) помогте кто знает? Задание.Числа Фибоначчи u0, u1, u2, … определяются следующим образом: u0=0, u1=1, un= un-1+ un-2(n=2,...

Программирование рекурсий. Преобразование числа в двоичное
Дано целое неотрицательное число n. Преобразовать его в двоичное число.

Программирование рекурсий. Преобразование числа в двоичное
Дано целое неотрицательное число n. Преобразовать его в двоичное число.

27
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
02.03.2012, 18:24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//
//  main.cpp
//  test
//
//  Created by Ilya Lavrenov on 3/2/12.
//  Copyright (c) 2012 [email]sandye64@gmail.com[/email]. All rights reserved.
//
 
#include <iostream>
 
int A(unsigned int n, unsigned int m)
{
    unsigned int return_value;
    
    if (!n)
        return_value = m + 1;
    else
        if (!m && n)
            return_value = A(n - 1, 1);
        else
            return_value = A(n - 1, A(n, m - 1));
    
    return return_value;
}
 
int main(int argc, const char * argv[])
{
 
    unsigned int m, n;
    std::cout << "Введите значения m, n" << std::endl;
    std::cin >> m >> n;
    std::cout << "Результат: " << A(n, m) << std::endl;
    return 0;
}
1
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
02.03.2012, 22:24  [ТС]
sandye51, программа не вычисляет m,n/
можно ли программу сделать чез int main()
p.s. чу чуть по проще)
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.03.2012, 05:33
aidoqa, я вижу это задание вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
 
int A(int n, int m)
{
    int ret = m + 1;
    if(n != 0)
    if(m == 0)
        ret = A(n - 1, 1);
    else
        ret = A(n - 1,A(n, m - 1));
    cout<<"m = "<<m<<" n = "<<n<<" A = "<<ret<<endl;
    return ret;
}
 
 
int main()
{
    int m, n;
    cout<<"Enter m : ";cin>>m;
    cout<<"Enter n : ";cin>>n;
    A(m,n);
    system("pause");
    return 0;
}
Проверял на вводе 3 4 - программа сидит в рекурсии секунд 10
Миниатюры
Программирование рекурсий  
1
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
03.03.2012, 06:39
А я вот как то так
C++
1
2
3
4
5
6
7
8
9
int A( int n, int m ) {
    if ( n == 0 )
    return m + 1;
 
    if ( m == 0 )
    return A( n - 1, 1 );
 
    return A( n - 1, A( n, m - 1));
}
1
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
04.03.2012, 13:06  [ТС]
-=ЮрА=-, почему то при проверке ваша команда не останавливается(проверял на DEV c++)
можно ли ее как нибудь остановить?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
04.03.2012, 15:53
При каких значениях?
0
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
04.03.2012, 16:03  [ТС]
при любых, хоть что вожу он сам перебирает несколько значений?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
04.03.2012, 17:04
Каких любых?) Проверил, все нормально. Функция растет очень быстро, при n == 4 и m == 1 получается 65533. Дальше вообще огромные числа.
0
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
04.03.2012, 17:13  [ТС]
как можно сделать поменьше?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
04.03.2012, 17:15
Что поменьше?) Выходное значение? Вводить n < 4
1
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
04.03.2012, 17:23  [ТС]
Toshkarik, покажи скрин этой программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
 
int A(int n, int m)
{
        int ret = m + 1;
        if(n != 0)
        if(m == 0)
                ret = A(n - 1, 1);
        else
                ret = A(n - 1,A(n, m - 1));
        cout<<"m = "<<m<<" n = "<<n<<" A = "<<ret<<endl;
        return ret;
}
 
 
int main()
{
        int m, n;
        cout<<"Enter m : ";cin>>m;
        cout<<"Enter n : ";cin>>n;
        A(m,n);
        system("pause");
        return 0;
}
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
04.03.2012, 17:50
Просто поменяй вот так
C++
1
2
3
4
int m, n;
cout<<"Enter n : ";cin>>n;
cout<<"Enter m : ";cin>>m;
A(n,m);
0
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
04.03.2012, 18:14  [ТС]
при вводе цифр (0,1) (1,0) (1,1) вроде все нормально если например (2,2) то что то не(или так должно и быть)
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
04.03.2012, 19:03
Проверил, все правильно, при 2, 2 результат 7. Вот если что таблица некоторых значений Функция Аккермана
0
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
04.03.2012, 19:08  [ТС]
почему у меня тогда сразу вот так идет?см(рисунок)
Миниатюры
Программирование рекурсий  
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
04.03.2012, 19:14
Все правильно, если не нужны промежуточные значения то удали в функции строку cout...
1
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
04.03.2012, 19:20  [ТС]
Toshkarik,
какую именно если удалить
C++
1
 cout<<"m = "<<m<<" n = "<<n<<" A = "<<ret<<endl;
то см(рисунок321), другие если удалять то ошибка)
Миниатюры
Программирование рекурсий  
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
04.03.2012, 19:27
Все верно, если не нужны промежуточные значения удали строку
C++
1
cout<<"m = "<<m<<" n = "<<n<<" A = "<<ret<<endl;
в функции, а в main измени
C++
1
A(n,m);
на
C++
1
cout << A(n,m) << endl;
0
 Аватар для aidoqa
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
04.03.2012, 19:31  [ТС]
Toshkarik, можешь готовый код закинуть, у меня что не получается(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2012, 19:31
Помогаю со студенческими работами здесь

Программирование рекурсий: отделить цифры данного числа и сложить межу собой
Дано целое неотрицательное число n. Отделить цифры данного числа и сложить межу собой.

Посчитать количество рекурсий
Здравствуйте. Как из функции вывести 2 значения? Или другим методом посчитать количество рекурсий? Recur4.Описать рекурсивную функцию...

Выбор кафедры в дальнейшей жизни: прикладное программирование VS системное программирование
Сразу извиняюсь что очень не по теме но всё же лучшего форума для этого вопроса я не нашел. Итак я вступаю во взрослую жизнь и давно...

Исключение рекурсий
Здравствуйте! у меня такая проблема(задача) запуск всех исполняемых файлов в указанном в каталоге. Каталог вводится в качестве...

Максимальное количество рекурсий
Есть функция, которая вызывает саму себя, причем делает она это крайне много раз. Вопрос: какой предел вызова функцией саму себя? А то в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru