2012-09-06 9 views
-6

가능한 중복 : 우리가 스택에 저장되어있는 프로그램 count(4),count(3),count.....count(0)을 실행할 때이 문제에
What is really happening in this code?이 코드에서 재귀는 어떻게 작동합니까?

내가 재귀

#include<stdio.h> 
count(int); 
main() 
{ 
    int x=4; 
    count(x); 
    return 0; 
} 
count(int n) 
{ 
    if(n>0) 
    { 
    count(n-1); 
    printf("%d",n); 
    count(n-1); 
    } 
    } 

의 내 개념을 적용하지 못할 ... 그러나 count(0)이 호출되고 if 조건이 거짓 일 때 .. 그러면 th 전자 제어? 누구든지 다양한 기능 호출을 보여주는 다이어그램의 도움으로 설명 할 수 있다면 제발.

+1

이것은 'C' – asawyer

+2

입니다. 올바른지 확인하십시오. 아주 오래되었거나 나쁜 C이지만 여전히 C. – Flexo

+2

지난 주에 동일한 질문을 적어도 10 번 게시했습니다. –

답변

0

다음 코드를 시도해 볼 수 있습니까?

#include<stdio.h> 
count(int); 
int main() 
{ 
    int x=4; 
    count(x); 
    return 0; 
} 

int count(int n) 
{ 
    if(n>0) 
    { 
     printf("%d",n); 
     return count(n-1); 
    } 
    else 
    { 
     printf("%d",n); 
     return n; 
    } 
} 
+0

Ok 나는 전에 바보가되었을 수도 있습니다. 이것은 틀린 문법입니다. – asawyer

+0

c 프로그래머가 아니므로 구문을 직접 확인하십시오. 나는이 짧은 프로그램에서 재귀를 사용하기위한 논리를 방금주었습니다. – Nitesh

+0

@asawyer - 여기에는 유효하지 않지만 else 뒤에는'{'대신 '}'만 오타가 있습니다. 암시 적 int로'count'를 선언하고 명시 적 리턴 타입으로 정의하는 것은 이상합니다. – Flexo

0

다이어그램이 필요하지 않습니다. count(0)을 사용하면 if 문이 실패하고 아무 것도하지 않고 count이 즉시 반환됩니다.

EDIT : Flexo 덕분에 원래 형식의 프로그램이 UB라는 것을 알려주었습니다. int를 반환하도록 선언 된 함수가 아무 것도 반환하지 않을 때 무엇을하는지 알려주지 않으므로 말입니다. (실제로, 나는 대부분의 호출 규칙이 무의미하게 행동 할 것이라고 추측하지만 여전히 잘못된 것입니다.)

+0

'count'는'int'를 리턴한다고 가정되지만, 리턴 값이 없으므로 UB가된다. – Flexo

+0

'return' 문이 있는지 여부는 상관 없습니다. – user1648810

+0

@ user1648810 예. 그렇지 않다면 함수는'int'를 반환한다고 가정하지 않았기 때문입니다. 무언가가 예상되는 곳으로 돌아 오지 않는 것은 정의되지 않은 동작입니다. – Flexo

관련 문제