피보나치 수열

간단한 피보나치 수열의 구현.

#include

#include

#include

int fibonacci(int);

int main(int argc, char* argv[])

{

int i;

if (argc==1){

printf(“Error. There are no options.\n”);

exit(1);

}

i=atoi(argv[1]);

printf(“%d-th number of fibonacci is %d\n”, i, fibonacci(i));

}

int fibonacci(int i)

{

if (i<1) {
printf(“Error. Parameter is negative.\n”);

}

else if (i==1) {

return 1;

}

else if (i==2) {

return 1;

}

else {

return fibonacci(i-2)+fibonacci(i-1);

}

}

4 thoughts on “피보나치 수열

Add yours

  1. 굳이 재귀함수를 쓴 이유는 “아무” 이유 없습니다. ^^

    제 프로그래밍 철학은, 어딘가에서 밝힌것 같기도 하긴 한데, “돌아가기만 하면 장땡”이기 때문이지요.

    물론 프로그램의 최적화라는 문제 그 자체에도 관심이 있긴 하지만, 여기서의 의도는 피보나치 수열의 수학적 정의를 있는 그대로 구현하는 겁니다.

    물론 배열의 길이를 늘려가거나, 자기참조 구조체 등을 이용해서 수열을 기록했다가 다시 사용할 수도 있겠지만 아무튼 위의 구현은 정말 “작동만 하면 되는” 구현이기 때문에 지적하신 부분은 일단 큰 의미를 두지 않았습니다.

    windows.h를 넣은 이유는 복잡하지만 다음과 같습니다.

    DevC++에서 컴파일후 실행시키면 실행이 되는 순간 콘솔이 닫혀버립니다. 따라서 결과를 확인하려면 잠시 멈춰둬야 하는데, 선배에게 배운 바에 따르면 그냥 아무 입력이나 하나 받으려고 대기하면 된다고 합니다. 물론 scanf를 써도 되긴 하는데 그 선배는 getc를 쓰라고 해서 예전에 windows.h를 넣었던 것 같습니다.

    그리고 지금 이 코드는 그때 만들었던 코드(역시 돌아가기만 하면 되는…)를 복사해서 고친거라 그게 여전히 살아있는 것이죠.

    즉, 빼도 됩니다. -_-;

  2. ‘간단한’ 구현을 의도하셨으니 당연할 수 있겠지만,

    N!계산할 때 계산량이 2^N 이겠네요.

    원래 피보나치 계산은 N일 거구요. ^^

    루프 대신 굳이 재귀함수를 쓴 이유라도?

    그리고, windows.h를 꼭 넣어야 하는 이유가 있나요?

    (개인적으로 windows.h를 좀 싫어해서… ^^ )

  3. printf(“%d-th number of fibonacci is %d\n”, fibonacci(i)); –> printf(“%d-th number of fibonacci is %d\n”, i, fibonacci(i));

댓글 남기기

이메일은 공개되지 않습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

Up ↑

%d 블로거가 이것을 좋아합니다: