해설에
recursive(0) -> 2반환
위로 쭉 5 11 23 47 이 반환됐는데 이 숫자가 어디서 나온건지 모르겠습니다
안녕하세요 길벗수험서 운영팀입니다.
으음... 좀더 구체적으로 질문해주셔야 해설이 가능할 듯 싶습니다.
제가 해설보다 더 자세히 설명드릴 방법이 별로 없네요..
좀 간단히 식만을 갖고 설명드려보겠습니다.
소스코드를 보시면, 5를 입력했을 때 함수가 자신을 다시 호출하는 재귀함수의 형태를 취하고 있습니다.
즉, 처음 5가 들어가면
i=(2*recursive(4))+1 을 수행하죠.
그럼 4로 호출되면
i=(2*recursive(3))+1 을 수행하고,
3으로 호출되면
i=(2*recursive(2))+1
2로 호출되면
i=(2*recursive(1))+1
1로 호출되면
i=(2*recursive(0))+1
여기서 0으로 호출되면 달라집니다. if문이 있기 때문이죠. 즉 recursive(0)은 return 2를 통해 2라는 값을 반환합니다.
이 것을 차례대로 되돌아가면 됩니다.
즉 1이 호출될 때 수행되었던
i=(2*recursive(0))+1 는
i=(2*2)+1 가 되어 i = 5가 되고
return i; 를 통해 5를 반환합니다. 즉, recursive(1)의 반환값은 5라는 의미죠.
2가 호출될 때 수행되었던
i=(2*recursive(1))+1 은
i=(2*5)+1 이 되어 i = 11이 되고
return i; 를 통해 11을 반환합니다.
이러한 방식대로 계속 올라가 마지막에 recursive(5)의 반환값은 결국 95가 됩니다.
코드의 순서를 차례대로 잘 따라가보세요. 재귀함수가 코드 순서가 헷갈릴 수 있으나, 침착하게 호출했던 코드들을 기억하면서 따라가다보면 생각보다 쉽게 답을 구할 수 있습니다.
행복한 하루되세요 :)
-
관리자2019-03-28 10:00:58
안녕하세요 길벗수험서 운영팀입니다.
으음... 좀더 구체적으로 질문해주셔야 해설이 가능할 듯 싶습니다.
제가 해설보다 더 자세히 설명드릴 방법이 별로 없네요..
좀 간단히 식만을 갖고 설명드려보겠습니다.
소스코드를 보시면, 5를 입력했을 때 함수가 자신을 다시 호출하는 재귀함수의 형태를 취하고 있습니다.
즉, 처음 5가 들어가면
i=(2*recursive(4))+1 을 수행하죠.
그럼 4로 호출되면
i=(2*recursive(3))+1 을 수행하고,
3으로 호출되면
i=(2*recursive(2))+1
2로 호출되면
i=(2*recursive(1))+1
1로 호출되면
i=(2*recursive(0))+1
여기서 0으로 호출되면 달라집니다. if문이 있기 때문이죠. 즉 recursive(0)은 return 2를 통해 2라는 값을 반환합니다.
이 것을 차례대로 되돌아가면 됩니다.
즉 1이 호출될 때 수행되었던
i=(2*recursive(0))+1 는
i=(2*2)+1 가 되어 i = 5가 되고
return i; 를 통해 5를 반환합니다. 즉, recursive(1)의 반환값은 5라는 의미죠.
2가 호출될 때 수행되었던
i=(2*recursive(1))+1 은
i=(2*5)+1 이 되어 i = 11이 되고
return i; 를 통해 11을 반환합니다.
이러한 방식대로 계속 올라가 마지막에 recursive(5)의 반환값은 결국 95가 됩니다.
코드의 순서를 차례대로 잘 따라가보세요. 재귀함수가 코드 순서가 헷갈릴 수 있으나, 침착하게 호출했던 코드들을 기억하면서 따라가다보면 생각보다 쉽게 답을 구할 수 있습니다.
행복한 하루되세요 :)