0

割り当てられたのは、再帰を使用してアッカーマン方程式を計算するプログラムを作成することでした。これは成功しました。課題の一部は次のように述べています。

「関数は、k の倍数である再帰関数呼び出しの数を出力する必要があります。n; m <= 3 の値に対して k = 100 を設定し、他のすべての値に対して k = 1; 000; 000 を設定します。プログラムは、行われた関数呼び出しの総数。」

アッカーマン関数は、関数呼び出しと再帰関数呼び出しの数を出力することになっていますが、その方法がわかりません。どんな助けでも素晴らしいでしょう。ありがとう!

これは私がこれまでに持っているものです:

#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;
}
4

2 に答える 2

4
static int count = 0;

int func() 
{
  count ++
  // do your work
  // recursive call
}

関数への呼び出しの総数を保持する静的変数を作成します。

そしてこの場合、静的変数はファイルスコープを持つcountようにその値を保持するため、グローバルにする必要はありません。静的変数を関数にローカルにするだけで十分です。static

于 2012-12-04T16:59:19.860 に答える
1

グローバル変数を使用して、呼び出しごとに値を増やします。

int calls_count = 0;

...

int ackermann (int n, int m)
{
    ++calls_count;
...
于 2012-12-04T16:57:34.040 に答える