计算递归函数调用,它是C中k的倍数

时间:2012-12-04 16:51:44

标签: c function recursion ackermann

任务是创建一个程序,使用递归计算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;
}

2 个答案:

答案 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;
...