[ kajla @ 05.04.2002. 16:16 ] @
Treba da napišem program za nalaženje Akermanove funkcije iterativnim postupkom (bez korišćenja rekurzije). Akermanova funkcija se definiše na sledeći način:
A(m,n)=
n+1 za m=0 i n>=0
A(m-1,1) za m>=1 i n=0
A(m-1,A(m,n-1)) za m>=1 i n>=1

Ako bi neko malo pomogao...

poz.
[ Riste Pejov @ 06.04.2002. 19:16 ] @
mislim, da imas greske kod akermanove funkcije,
koliko se ja secam bilo je nekog kvadriranja

samo sto sam napisao Akerman's Function u google i nasao sam ovo:

Akerman's Function
A(i,j) = 2^j for j>=1
A(i,1) = A(i-1,2) for i>=2
A(i,j) = A(i-1, A(i,j-1)) for i,j >= 2

nisam imao vremena proveriti dali je to matematicki isto sa funkcije iz tvoga posta
ali ipak u tvojoj akermanovoj funkciji mozes doci do slucaja kad funkcija nema
resenja.

i jos jedno pitanje, dali je cilj isprintati N t.e. j ?

p.s. mislim da imam resenja ...

pozdrav
[ pegazus @ 07.04.2002. 15:20 ] @

Evo resenje u C-u, valjda ti nece biti problem da ga prevedes u Paskal:
<pre>
#include <stdio.h>
#define DEPTH 1000
int i[DEPTH], j[DEPTH], out[DEPTH], rez;
int akk(int m, int n) {
int cnt = 0;
i[cnt] = m;
j[cnt] = n;
while (cnt >= 0) {
if (cnt>DEPTH-1) {
fprintf (stderr, "Stack Owerflow!");
exit(1);
}
if (out[cnt]) {
if (out[cnt] == 2) {
out[cnt] = 0;
cnt--;
} else if (out[cnt] == 3) {
j[cnt + 1] = rez;
i[cnt + 1] = i[cnt] - 1;
out[cnt] = 2;
cnt++;
}
} else {
if (i[cnt] == 0) {
rez = j[cnt] + 1;
cnt--;
} else if (j[cnt] == 0) {
i[cnt + 1] = i[cnt] - 1;
j[cnt + 1] = 1;
out[cnt] = 2;
cnt++;
} else {
i[cnt + 1] = i[cnt];
j[cnt + 1] = j[cnt] - 1;
out[cnt] = 3;
cnt++;
}
}
}
return rez;
}

int main() {
int m, n;
printf ("Unesite dva prirodna broja:");
scanf ("%d %d", &m, &n);
printf("0K\n");
printf ("\nakk( %d, %d)= %d\n", m,n, akk (m, n));
exit(0);
}


Usput kako da pisem a da mi se kod ne slaze kao obican tekst.