순환형태의 fib함수 질문
글쓴이: na4980 / 작성시간: 목, 2013/04/18 - 9:38오후
int fib(int n)
{
printf("fib(%d) is called.\n", n);
if(n==0) return 0;
if(n==1) return 1;
return (fib(n-1) + fib(n-2));
이 코드의 출력 결과가 이렇게 나오는데요.. 어떠한 과정으로 출력이 되는건지 이해가 안됩니다. 설명해주실 수 있나요?
fib(6) is called
fib(5) is called
fib(4) is called
fib(3) is called
fib(2) is called
fib(1) is called
fib(0) is called
fib(1) is called
fib(2) is called
fib(1) is called
fib(0) is called
fib(3) is called
fib(2) is called
fib(1) is called
fib(0) is called
fib(1) is called
fib(4) is called
fib(3) is called
fib(2) is called
fib(1) is called
fib(0) is called
fib(1) is called
fib(2) is called
fib(1) is called
fib(0) is called
Forums:
콜론 앞의 숫자가 호출되는 순서입니다.
콜론 앞의 숫자가 호출되는 순서입니다.
17: fib(4)부터는 생략했습니다 :-)
좋은 하루 되세요!
멋진 그림입니다!
멋진 그림입니다!
전위순회인가요?
학부 수업 기억이 나네요.. 피보나치도 트리구조였군요..
Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.
깊이 우선 탐색입니다.
깊이 우선 탐색입니다.
전위 순회는 깊이 우선 순회(depth-first
전위순회와 깊이우선탐색이 다른가요?
Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.
그림이.. 짱이시네요..
오.......
먼가 출력결과가 이해하기힘들때
저도 초보 개발자인데요
출력결과랑 자기생각이랑 다를땐 처음 함수부터 하나씩
따라가면서 적어보세요
return 할때 (fib(n-1) + fib(n-2)); 이부분이니
처음에 6을 넣으셧을테고 fib(5) + fib(4) 가 리턴이 되겟죠
근데 재귀적방법으로 하셧고 쓰레드나 이런걸로 하지 않으셧으니 분명 순서대로 함수가 실행이 됩니다.
fib(5) 는 리턴하면서 fib(4) + fib(3) 을 리턴을 하면
한단계지낫을때 맨처음 fib(6) 에서의 리턴문장이
fib(6) is called fib(5) is called 가 출력이 되고
return (fib(4) + fib(3)) + fib(4); 가 됩니다.
이걸 계속 따라가시다보면 출력결과가 저렇게 나오는 이유를 아시겟죠? ㅋㅋ
화이팅이요!!
다들 감사합니다!
설명들을 잘해주셔서 잘 이해했습니다~ 감사합니다^^
댓글 달기