2012-05-06 7 views
1

루프 내에서 재귀 함수를 호출 할 때 두 가지 문제가 발생합니다. 다음 샘플 코드 고려해루프 내에서 재귀 함수 호출

int fact(int x) 
{ 
    if(x == 1) 
     return 1; 
    return x*fact(x-1); 
} 

int main() { 
    int n = 2; 
    for(int i = 0; i < n; i++); 
     std::cout << fact(4) << std::endl; // 24 ?? 
    return 0; 
} 

문제 1 :이 프로그램에 대한 나의 예상 결과는 24 24 (두 번 24 프린터로)하지만 실제 결과는 내가 단 하나의 24을 얻었다.

문제 2main() 함수가 반복적으로 호출 된 이유는 무엇입니까? 재귀 적으로 main 함수를 호출하지 않습니다.

누군가 나에게 다중 출력을 얻으려면 루프 내부에서 재귀 함수를 호출하는 방법에 대한 생각을하면 좋을 것입니다.

답변

11
for(int i=0; i < n; i++); <---------------------- notice this 
     std::cout << fact(4) << std::endl; // 24 ?? 

을 주목 for 루프 후 ;에게. 그것이 하나의 출력 만 얻는 이유입니다. std::cout은 루프가 종료 된 후에 실행됩니다. 그것은 외부입니다.

첫 번째 질문에 대한 답변입니다. 이제 두 번째 질문 :

main() 함수를 반복적으로 호출하는 이유는 무엇입니까? 재귀 적으로 main 함수라고 불리는 이유는 무엇입니까?

게시 한 코드에이 문제가 있다고 생각하지 않습니다. 게시하지 않은 코드에서 뭔가를해야합니다. 왜냐하면 main()이 재귀 적으로 호출되기 때문입니다.

참고 C++ 언어 사양에 의해을 금지 당신의 코드 (재귀 또는 기타)입니다 에서 main()를 호출. 따라서 GCC에서 -pedantic 옵션을 사용하여 컴파일하면 우연히 프로그램에서 main()으로 전화하면 컴파일하지 않아야합니다.

관련 문제