본문 바로가기

Embeded C/C언어 예제

C언어 피보나치 수열


0 1 1 2 3 5 8 13 21.....
피보나치 수열이란 해당하는 수의 앞에 두수를 더 했을때 해당하는 수가 나오는 수를 열거하여 놓은 것입니다
예)
2의 앞자리 1과 1을 더하면 2가 됩니다
5의 앞자리 3과 2를 더하면 5가 됩니다

//열 입력하면 열수 만큼 피보나치 수열을 출력하는 프로그램

think>>
1) 피보나치 수열의 식을 먼저 세운다
2) for문을 이용하여 열수만큼 돌고 계산하고 출력한다
3) 종료포인트를 만든다
 
피보나치 수열은 앞에서 말했듯이 2개의 수를 합하여 다음자리 수를 구합니다
그럼 변수가 3개 필요합니다

f1 = 0;
f2 = 1;
f3 = f1 + f2;

f3 계산을 마친후에는 f1과 f2를 한자리씩 밀면 다음 열을 구할수 있습니다

f1=f2
f2=f3
f3 = f1+f2 //다음열

그리고 for문에서 증감에 사용될 i와 열의 수를 나타내는 n을 변수로 선언합니다

위의 요소를 바탕으로 피보나치 수열을 C언어로 작성하면

#include<stdio.h>

 

int main(void)

{

             int n;

             int f1 = 0;

             int f2 = 1;

             int f3, i;

             char ch;

 

             printf("**** 피보나치 수열 ****\n");

             for(;;)

             {
                          printf("항의 개수 입력  :");

                          scanf("%d", &n);

                          

                           if(n>0)

                           {

    printf("피보나치 수열은 0, 1, ");

                                        for(i=0; i<n-1; i++)

                                       {

                                                     f3=f1+f2;

                                                     printf("%d, ", f3);

                                                     f1=f2;

                                                     f2=f3;

                                       }

    printf("입니다\n");

                                        f1=0;

                                        f2=1;                                                                                        

                           }

                           fflush(stdin);        

                           if(n < 0)

                           {

                                       printf("종료하시겠습니까?(Y/N): ");

                          

                                        scanf("%c", &ch);

                          

                                        if( ch == 'y')

                                        {           

                                                     printf("프로그램 종료!\n");

                                                     break;

                                        }

                           }

              }

             return 0;

}


1)printf문중 입니다에 개행을 넣어서 반복될때에 깔끔하게 보이도록 추가하였습니다
2)수열 제일앞의 0, 1을 print 문으로 처리하였습니다 계산을 해서 구하면 식이 더욱 복잡해 집니다.
3)제일 앞에 1의 열을 구하지 않아서 i > n-1을 써주게 되었습니다
4) f1,f2를 초기화 하지 않으면 값이 계속 증가하여 버립니다


추가로 입력 받은 항 개수만큼의 피보나치 수열의 합을 구하는 프로그램도 작성하면

#include<stdio.h>

 

int main(void)

{

             int n;

             int f1 = 0;

             int f2 = 1;

             int f3, i;

             int sum;

             char ch;

 

             printf("**** 피보나치 수열의 합 ****\n");

             for(;;)

             {                          

                          printf("항의 개수 입력  :");

                          scanf("%d", &n);

                          

                           if(n>0)

                           {

                                        for(i=0; i<n-1; i++)

                                       {

                                                    f3=f1+f2;

                                                    sum += f3;

                                                    f1=f2;

                                                    f2=f3;

                                       }

                                        printf("피보나치 수열 %d개 항의 합은  %d\n", n, sum+1);

                                        f1=0;

                                        f2=1;

                                        sum = 0;                                                    

                           }                          

                           fflush(stdin);        

            

                           if(n < 0)

                           {

                                       printf("종료하시겠습니까?(Y/N): ");

                          

                                        scanf("%c", &ch);

                          

                                        if( ch == 'y')

                                        {           

                                                     printf("프로그램 종료!\n");

                                                     break;

                                        }

                           }

              }

             return 0;

}


결과>>
수열을 변수 sum에 저장하며 합하게되니 수열의 합을 구하는 프로그램이 됩니다