Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.97
tysik
0 / 0 / 0
Регистрация: 23.02.2009
Сообщений: 26
#1

найти функцию Аккермана - C++

22.05.2009, 11:01. Просмотров 5758. Ответов 6
Метки нет (Все метки)

Подскожите где ошибка. Здесь надо найти функцию Аккермана.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
int main ()                          
       {   int m,n,t;                 
           int ackr(int, int);
           scanf("%d %d ",&n,&m);
           t=ackr(n,m);
           printf("%d",t);
       }
      int ackr( int n, int m)    
      {  int z;                        
         if(n=0)  z=(m+1);
         else if ((m=0)&&(n!=0))
 
         { z=ackr(n-1,1);}
         else if ((m>0)&&(n>0))
        
         {z=ackr(n-1,(ackr(n,m-1)));  }  
         
        return z;
      }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2009, 11:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос найти функцию Аккермана (C++):

Найти рекурсивную функцию Аккермана - C++
Подскажите где ошибка. Здесь надо найти рекурсивную функцию Аккермана. Вроде всё нормально, но результат не выводит! #include...

Даны неотрицательные целые числа. Вычислить функцию Аккермана - C++
Даны неотрицательные целые числа n и m. Вычислить функцию Аккермана:

Найти значение функции Аккермана - C++
Найти значение функции Аккермана A(m, n), которая определяется для всех неотрицательных целых аргументов m и n следующим образом: A(0, n)...

Найти рекурсивно значение функции Аккермана A(m, n) - C++
Я новичек так что сильно не бейте :) Нужно рекурсивно найти функцию Аккермана. double Akerrman(int m,int n) { if (m = 0) return...

Функция Аккермана - C++
Разработать рекурсивную функцию нахождения значения функции Аккермана, которая определяется для всех неотрицательных целых аргументов m и n...

Функция Аккермана и рекурсия - C++
Доброго времени суток. Даны неотрицательные целые числа n, m; вычислить A(n, m), где A(n, m)=фиг. скобка m+1, if n=0, ...

6
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 483
22.05.2009, 23:31 #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
24
25
26
27
28
29
30
#include <stdio.h>
long akker (int m,int n);
void main()
{
int z,m1,n1;
printf ("Введите m и n: ");
scanf ("%d%d",&m1,&n1);
 
z=akker(m1,n1);
printf ("Ответ: %d",z);
}
 
 
long akker (int m,int n)
{
int q=0;
if (m==0) 
{
q=n+1;
}
if (m>0 && n==0) 
{
q=akker(m-1,1);
}
if (m>0 && n>0) 
{
q=akker(m-1,akker(m,n-1));
}
return q;
}
честно не понял что в твоей конкретно не так...
а эта работает только на маленькие числа, на большие stack overflow пишет...
А как от этого избавиться сам не знаю...
1
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
20.02.2010, 13:40 #3
функция аккермана:

C++
1
2
3
4
5
6
7
8
int Akk(int m, int n){
     if (!m and n)
     return (n+1);
     else
     if (m and !n)
     return Akk(m-1,1);
     return Akk(m-1,Akk(m,n-1));
}
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.02.2010, 13:41 #4
if (!m and n) //это больше похоже на псевдокод.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
20.02.2010, 13:54 #5
Цитата Сообщение от From_Tula Посмотреть сообщение
честно не понял что в твоей конкретно не так...
а эта работает только на маленькие числа, на большие stack overflow пишет...
А как от этого избавиться сам не знаю...
Функция Аккермана — простой пример вычислимой функции, которая не является примитивно рекурсивной. Она принимает два неотрицательных целых числа в качестве параметров и возвращает натуральное число, обозначается . Эта функция растёт очень быстро, например, число А(4, 4) настолько велико, что количество цифр в порядке этого числа многократно превосходит количество атомов в наблюдаемой части вселенной.
Подробней здесь
А вообще, когда у нас была тема "Рекурсия", для вычисления функции Аккермана предлагалось использовать вспомогательную функцию
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
int smacc(int n, int x)//Вспомогательная функция
{
    switch(n)
    {
    case 0: return (x+1);
    case 1: return x;
    case 2: return 0;
    case 3: return 1;
    default: return 2;
    }
}
 
int ackr(int n, int x, int y)//Рекурсивная функция
{
    int z;
    if(n==0||y==0)
        z=smacc(n, x);
    else
    {
        z=ackr(n, x, y-1);/*Рекурсивные   */
        z=ackr(n-1, z, x);/*вызовы функции*/
    }
    return z;
}
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
20.02.2010, 14:06 #6
Genius Ignat, функция нормально же работает
0
kiborg_18
4 / 4 / 0
Регистрация: 21.02.2011
Сообщений: 61
22.06.2011, 18:44 #7
Nameless One, В функцию Аккермана вводят 2 переменные, а тут 3, есть m и n что вместо чего вводить?
0
22.06.2011, 18:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2011, 18:44
Привет! Вот еще темы с ответами:

Рекурсия. Функция Аккермана. - C++
вычислить рекурсивным методом значения математической зависимости, заданной рекурентной формулой, для произвольного значения параметров ...

Рекурсивная функция Аккермана - C++
Добрый вечер. Столкнулся с такой вот проблеммой. Условие задачи : Написать рекурсивную функцию для вычисления значения так...

Вывести таблицу функции Аккермана - C++
Не знаю как исправить ошибку... и можно пояснить что за ошибка? #include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include &lt;map.h&gt; ...

Функция Аккермана без рекурсии - C++
Задача: A(0, n) = n + 1; A(m, 0) = A(m–1, 1); при m &gt; 0; A(m, n) = A(m–1, A(m, n–1)); при m &gt; 0 и n &gt; 0. С рекурсией она...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru