2012-12-04 3 views
0

할당은 성공적으로 수행 한 재귀를 사용하여 Ackermann 방정식을 계산하는 프로그램을 작성하는 것이 었습니다. 과제 부품 말한다 :C에서 k의 배수 인 재귀 함수 호출을 계산

"기능은 K의 배수 재귀 함수 호출의 수를 출력한다 집합 K = N의 값 100; 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; 
} 
+1

전역 변수를 사용하여 각 호출에서 값을 증가시킵니다. –

답변

3
static int count = 0; 

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

정적 변수를 확인 총 수를 유지합니다

내가 지금까지 무엇을 가지고 기능 호출에 대한

그리고이 경우에는 count을 전역으로 설정할 필요가 없습니다. 정적 변수는 파일 범위가 static이므로 정적 변수는 값을 유지하므로 함수에 로컬 정적으로 충분하게 만들면됩니다.

+0

그게 이해하지만, 이해가 안되는 것은 함수가 k의 배수 인 재귀 함수 호출의 수를 어떻게 출력해야하는지입니다. – user1876409

+0

필자가 이해하는 한,'if (count % k == 0) actual_count ++;와 같이'k '의 배수로 논리를 적용하면 함수 호출의 총 수를 유지하는'actual_count' 변수를 가질 수 있습니다 . 'count'가 모든 함수 호출을 추적하기 때문에 지금은 단지 그것을 체크하고'static' 인 다른 변수'actual_count'를 증가시킵니다. – Omkant

+0

@ user1876409 : 내 답변을 수정해야하나요? – Omkant

1

글로벌 변수를 사용하여, 각 호출에 그 값을 증가 :

int calls_count = 0; 

... 

int ackermann (int n, int m) 
{ 
    ++calls_count; 
...