피보나치 수열 C++ - pibonachi suyeol C++

피보나치 수를 처음 연구한 사람은 레오나르도 피보나치로 토끼 수의 증가에 대해 이야기 하면서 언급했던 내용입니다. 첫 달에는 새로운 토끼 한쌍에서 시작합니다. 두 달 이상 되는 토끼만 번식이 가능하며 매달 한쌍씩만 낳습니다. 이렇게 토끼의 쌍이 늘어나는 수를 피보나치 수라고 합니다. 결과는 1, 1, 2, 3, 4, 8, 13, 21 … 증가하게 됩니다. 이것을 C 언어로 구해 보겠습니다. 

피보나치 수열 C++ - pibonachi suyeol C++

피보나치의 수식은 다음과 같습니다. 이것을 C 소스로 구현할 것입니다. 먼저 재귀 함수를 이용한 방법입니다.

피보나치 수열의 기본 규칙은 처음 두 항은 1이고 세 번째 항부터 이전 두 항의 합이 됩니다. 1, 1, 2 다음부터 1+2 가 다음 항이 되는 것이죠. 그 다음은 2+3=5가 되겠죠. 이것을 기반으로 로직을 짜시면 됩니다. 이전에 계산된 값이 필요하기 때문에 fibo 함수 내에서 n =0 이 될 때까지 fibo 함수를 다시 호출하는 것입니다

#include <stdio.h>
#include <stdlib.h>

int fibo(int n) ;

int main(void){
	int n;
	int i;

	printf("\n피보나치 수 입력 : \n" );
	scanf("%d" , &n) ;

	for(i = 0 ; i < n ; i++ ){
		printf("%d " , fibo(i));
	}

	printf("\n\n");
		
	system("pause");
	return 0;

}

int fibo(int n){
	if(n == 0) return 0;
	else 
		if(n == 1) return 1;
	else 
		return fibo(n-1) + fibo(n-2);
}

이번에는 별도의 함수는 만들지 않고 for 문 만으로 구현한 소스입니다. 먼저 변수를 3개 만듭니다. 0, 0, 1 3가지 변수를 만들고 한 단계 전에 값과 두 단계 전에 값을 더해서 만드는 것입니다. head 가 두 단계 전 값이며 rear 이 한 단계 전 값이 됩니다. 두 개의 변수에 저장된 값을 더해서 수열을 만들게 됩니다

#include <stdio.h>
#include <stdlib.h>

int main(void){

	int i ;
	int n;
	int head = 0;
	int mid = 0;
	int rear = 1;
	
	printf("\n 피보나치 수 입력 : ");
	scanf("%d" , &n) ;
	
	for(i = 0 ; i < n ; i++){
		printf("%d " , head) ;
		mid = head+rear;
		head = rear;
		rear = mid;
	}

	printf("\n\n");
	system("pause");
	return 0 ;
}

C언어에서 피보나치 수열을 출력하는 방법에 대해 알아보겠습니다.

이번 포스팅은 두가지 방법에 대해 소개하도록 하겠습니다.

- N항 까지의 피보나치 수열 출력(ex. N = 4 , 0 1 1 2 )

- 특정 값까지의 피보나치 수열 출력( 5까지, 0 1 1 2 3 5)

- N항 까지의 피보나치 수열 출력

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include <stdio.h>

int main() {

int i, n, t1 = 0, t2 = 1, nextTerm;

printf("출력할 피보나치 수열의 항의 N항: ");

scanf("%d"&n);

printf("피보나치 수열: ");

for (i = 1; i <= n; ++i) {

printf("%d, ", t1);

nextTerm = t1 + t2;

t1 = t2;

t2 = nextTerm;

}

return 0;

}

피보나치 수열 C++ - pibonachi suyeol C++

피보나치 수열은 n항의 값이 (n-1) ,(n-2)의 합으로 이루어집니다. 예를들어 t1,t2 가 0번째, 1번째 항이라면 더해진 값은 2번째 항이 되며

3번째 항은 1번째,2번째 항의 합이 되기 때문에  

        nextTerm = t1 + t2;

        t1 = t2;

        t2 = nextTerm;

로 구현합니다.

- 특정 값까지의 피보나치 수열 출력

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include <stdio.h>

int main() {

int t1 = 0, t2 = 1, nextTerm = 0, n;

printf("출력할 수의 범위: ");

scanf("%d"&n);

// displays the first two terms which is always 0 and 1

printf("피보나치 수열: %d, %d, ", t1, t2);

nextTerm = t1 + t2;

while (nextTerm <= n) {

printf("%d, ", nextTerm);

t1 = t2;

t2 = nextTerm;

nextTerm = t1 + t2;

}

return 0;

}

피보나치 수열 C++ - pibonachi suyeol C++

방법은 위와 같지만 횟수가 아닌 while문을 이용하여 입력한 값보다 작을 경우에면 출력이 됩니다.