상세 컨텐츠

본문 제목

1-1 1부터 50까지 정수를 입력받아 그 수만큼 피보나치 합 구하기

과제

by 근성 2021. 7. 5. 15:50

본문

 

기본적으로 피보나치수열을 구현하려면 재귀용법과 비재귀용법중 하나를 사용해야합니다.

 

재귀용법은 사용이 편리함과 재사용에 용이하지만, 비재귀에 비하면 시간이 느립니다.

비재귀용법은 재귀용법처럼 편하지는 않지만, 사용자가 코드를 작성한다면 작동시간이 우수합니다.

 

피보나치 수열만 구현하는 코드를 작성하면 되므로, 재사용을 하지않아 비재귀용법을 사용했습니다.

 

#include<iostream>//c의 stdio.h와 비슷한 전처리기

using namespace std;//std선언없이 cin,cout,endl,..등 선언하기

int main()
{
	int fibo; //항을 입력받을변수
	long long int result = 0;//피보나치 결과값
	long long int first = 1, second = 0;
	cout << "Number:"; 
	cin >> fibo;//변수 입력
	if (fibo <= 0 || fibo > 50) {
		std::cout << "Error please put 1~50" << std::endl;
		main();//1~50인 수가 아닐경우에 다시
	}
	else if (fibo == 1)//1입력 받을경우
		result == 1;
	else
		for (int i = 2; i <= fibo; i++)
		{
			result = first + second;
			second = first; //전의 전 결과값
			first = result;//전 결과값
		}
	cout << result << endl;


	return 0;
}

 

50까지의 피보나치 합은 보통의 int를 사용하면 overflow가 생기므로 long long int를 사용해서 overflow를 방지시켰습니다.

 

저 코드를 작성후 4와 50을 입력하면 이런 결과값을 보실 수 있습니다.

4와 50을 입력했을경우

주어진 문제는 overflow를 생각해서 풀면 쉽게 해결할 수 있습니다.

#이 문제의 출처는 kw대학교 컴퓨터정보공학부 2021년 1학기 객체지향프로그래밍 과제문제입니다.

 

관련글 더보기

댓글 영역