NIMA_1981
دوشنبه 25 بهمن 1389, 22:10 عصر
سلام دوستان
من با این تابع اکرمن مشکل دارم دارم تا عدد 3 رو جواب میده اما بیتر از عدد 3 فکر کنم overflow میشه
میشه راهنمایی کنید
#include <stdio.h>
#include <stdlib.h>
unsigned int calls;
unsigned int naive_ackermann(unsigned int ,unsigned int);
unsigned int iterative_ackermann(unsigned int,unsigned int);
unsigned int formula_ackermann(unsigned int,unsigned int);
int main() {
unsigned int m, n, result;
m = 4;
n = 1;
calls = 0;
result = naive_ackermann(m, n);
printf("Naive: %u (%u calls)\n", result, calls);
calls = 0;
result = iterative_ackermann(m, n);
printf("Iterative: %u (%u calls)\n", result, calls);
calls = 0;
result = formula_ackermann(m, n);
printf("Formula: %u (%u calls)\n", result, calls);
return 0;
}
unsigned int naive_ackermann(unsigned int m, unsigned int n) {
calls++;
if (m == 0)
return n + 1;
else if (n == 0)
return naive_ackermann(m - 1, 1);
else
return naive_ackermann(m - 1, naive_ackermann(m, n - 1));
}
unsigned int iterative_ackermann(unsigned int m,unsigned int n) {
calls++;
while (m != 0) {
if (n == 0) {
n = 1;
} else {
n = iterative_ackermann(m, n - 1);
}
m--;
}
return n + 1;
}
من با این تابع اکرمن مشکل دارم دارم تا عدد 3 رو جواب میده اما بیتر از عدد 3 فکر کنم overflow میشه
میشه راهنمایی کنید
#include <stdio.h>
#include <stdlib.h>
unsigned int calls;
unsigned int naive_ackermann(unsigned int ,unsigned int);
unsigned int iterative_ackermann(unsigned int,unsigned int);
unsigned int formula_ackermann(unsigned int,unsigned int);
int main() {
unsigned int m, n, result;
m = 4;
n = 1;
calls = 0;
result = naive_ackermann(m, n);
printf("Naive: %u (%u calls)\n", result, calls);
calls = 0;
result = iterative_ackermann(m, n);
printf("Iterative: %u (%u calls)\n", result, calls);
calls = 0;
result = formula_ackermann(m, n);
printf("Formula: %u (%u calls)\n", result, calls);
return 0;
}
unsigned int naive_ackermann(unsigned int m, unsigned int n) {
calls++;
if (m == 0)
return n + 1;
else if (n == 0)
return naive_ackermann(m - 1, 1);
else
return naive_ackermann(m - 1, naive_ackermann(m, n - 1));
}
unsigned int iterative_ackermann(unsigned int m,unsigned int n) {
calls++;
while (m != 0) {
if (n == 0) {
n = 1;
} else {
n = iterative_ackermann(m, n - 1);
}
m--;
}
return n + 1;
}