任务是创建一个程序,使用递归计算Ackermann方程,我成功地做了。部分任务说:
“该函数应该打印k的倍数的递归函数调用的数量。设置k = 100表示 n的值; m <= 3,k = 1; 000;所有其他价值的000。您的程序还应打印总数 函数调用。“
ackermann 函数应该打印出函数调用和递归函数调用的次数,但我无法弄清楚如何去做。任何帮助都会很棒。谢谢!
这是我到目前为止所做的:
#include <stdio.h>
//function to compute the end result ackermann equation
int ackermann (int n, int m)
{
int result = 0;
if (n == 0)
{
result = m + 1;
} else if (m == 0)
{
result = ackermann(n - 1, 1);
} else
{
result = ackermann(n - 1, ackermann(n, m - 1));
}
return result;
}
//main function
int main(int argc, const char * argv[])
{
char ans = 'y';
int m, n, result;
printf("\n\n------Ackermann Function------");
while (ans == 'Y' || ans == 'y') {
printf("\nPlease enter n: ");
scanf("%d", &n);
printf("\nPlease enter m: ");
scanf("%d", &m);
result = ackermann(n, m);
printf("\nResult: %d", result);
printf("\n\nDo you want to go again? ");
scanf(" %c", &ans);
}
return 0;
}
答案 0 :(得分:3)
static int count = 0;
int func()
{
count ++
// do your work
// recursive call
}
创建静态变量,该变量将保留对函数的调用总数。
在这种情况下,您不必将count
作为全局使其局部静态到函数就足够了,因为静态变量保留了它的值,因为static
具有文件范围。
答案 1 :(得分:1)
使用全局变量,在每次调用时递增其值:
int calls_count = 0;
...
int ackermann (int n, int m)
{
++calls_count;
...