.. Cover Letter

ㅇ 공부#언어/(C++) 자료구조 및 STL

1. 피보나치 수열

BrainKimDu 2022. 9. 15. 21:19

피보나치 수열 문제

1, 1, 2, 3, 5, 8, 13, 21 ...

n항과  (n+1)항을 더하는 알고리즘을 작성해보자.

숫자를 입력받으면 해당하는 항의 피보나치 수열을 출력한다. 

 


알고리즘 분석

 


숫자 n이 입력되면 n항까지 피보나치 수열을 계산한다.

n0 = 1 이라면 n1 = 1이다.

n0 + n1 = n2

n1 + n2 = n3

n2 + n3 = n4

 의 계산과정을 거친다.

 

우선 생각이 가는대로 알고리즘을 작성해본다.

ADT 피보나치 (int n){
int 출력수1 = 1;
int 출력수2 = 1;


	출력하세요(출력수1);    // 첫째항을 미리 출력하자
	for(int i=0; i<n-1; i++){
    	if(n이 1이라면)
    		출력하세요 (출력수2);   // 두번째항을 출력하자
            
        if(n이 1보다 크다면) {
        	int temp;
           	temp = 출력수2;
        	출력수2 =  출력수1 + 출력수2;
            출력수1 = temp;
            출력하세요 (출력수2);
            }
    }
}

 

C언어로 구현해보았다.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>


void pibo(int n) {
	int output1 = 1;
	int output2 = 1;

	printf("%d ", output1);
	for (int i = 0; i < n; i++) {
		if (i == 1)
			printf("%d ", output2);
		if (i > 1) {
			int temp;
			temp = output2;
			output2 = output1 + output2;
			output1 = temp;
			printf("%d ", output2);
		}
	}
	
}

int main() {
	int n;
	printf("피보나치 수열을 구합니다. 숫자를 입력해주세요.");
	scanf("%d", &n);
	pibo(n);
	return 0;
}

 

알맞게 작동한다.

 

 


재귀함수로 작성해보아라.

피보나치 수열 문제

1, 1, 2, 3, 5, 8, 13, 21 ...

n항과  (n+1)항을 더하는 알고리즘을 작성해보자.

숫자를 입력받으면 해당하는 항의 피보나치 수열만 출력한다.

(나머지 항을 출력할 필요는 없다.)

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int f1(int n) {
	if (n == 0 || n == 1) {
		return n;
	}
	return f1(n - 1) + f1(n - 2);
}

int main() {
	int n;
	printf("피보나치 수열을 구합니다. 숫자를 입력해주세요.");
	scanf("%d", &n);
	printf("%d", f1(n));
}