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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.97
tysik
0 / 0 / 0
Регистрация: 23.02.2009
Сообщений: 26
22.05.2009, 11:01     найти функцию Аккермана #1
Подскожите где ошибка. Здесь надо найти функцию Аккермана.

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;
      }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 469
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 пишет...
А как от этого избавиться сам не знаю...
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 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));
}
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.02.2010, 13:41     найти функцию Аккермана #4
if (!m and n) //это больше похоже на псевдокод.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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;
}
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
20.02.2010, 14:06     найти функцию Аккермана #6
Genius Ignat, функция нормально же работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2011, 18:44     найти функцию Аккермана
Еще ссылки по теме:

C++ Даны неотрицательные целые числа. Вычислить функцию Аккермана
C++ Функция Аккермана без рекурсии
C++ Максимальное значение функции Аккермана

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

Или воспользуйтесь поиском по форуму:
kiborg_18
4 / 4 / 0
Регистрация: 21.02.2011
Сообщений: 61
22.06.2011, 18:44     найти функцию Аккермана #7
Nameless One, В функцию Аккермана вводят 2 переменные, а тут 3, есть m и n что вместо чего вводить?
Yandex
Объявления
22.06.2011, 18:44     найти функцию Аккермана
Ответ Создать тему
Опции темы

Текущее время: 10:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru