Я работаю над тем, чтобы больше узнать о функции Аккермана, времени рекурсии и функциональности в целом, однако мой код не будет компилироваться. У меня такое чувство, что это связано с массивами в acktgen()
, но я не уверен на 100%.Ackermann Table Geneation
#include <stdlib.h>
#include <iostream>
using namespace std;
int ack(int m, int n){
if(m==0) return n+1;
else if (n==0) return ack(m,1);
else return ack(m-1,ack(m,n-1));
}
int acktgen(const int s, const int t){
int acktable[s+1][t+1];
for (int i = 1 ; i= t+1; ++i){ //column labels
acktable[0][i]= i-1 ;
}
for (int i = 1 ; i= s+1; ++i){ //row labels
acktable[i][0]= i-1 ;
}
for (int i = 1; i<=s+1; ++i){
for (int j = 1; j<=t+1; ++j){
acktable[i][j]= ack(i-1,j-1);
}
}
return(acktable);
}
int main(){
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
cout<<acktgen(4,4)[i][j]<< "\t";
}
}
}
Я знаю, что это не самый эффективный алгоритм Аккермана, но я просто использую его в качестве примера.
Ошибка компилятора:
prog.cpp: In function 'int acktgen(int, int)':
prog.cpp:26:17: error: invalid conversion from 'int (*)[(t + 1)]' to 'int' [-fpermissive]
return(acktable);
^
prog.cpp:14:6: warning: address of local variable 'acktable' returned [-Wreturn-local-addr]
int acktable[s+1][t+1];
^
prog.cpp: In function 'int main()':
prog.cpp:32:24: error: invalid types 'int[int]' for array subscript
cout<<acktgen(4,4)[i][j]<< "\t";
^
Просим сообщать об ошибке компилятора. – PaulMcKenzie
И сделано. Я знал, что забыл сделать что-то. – nick5435
BTW, какой компилятор вы используете? Я получаю следующие ошибки: http://ideone.com/sZ4OMF Эти ошибки я ожидал. – PaulMcKenzie