Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 대칭수
- API
- C언어
- 프로젝트 오일러
- #프로젝트 오일러
- #소수판별
- PiFaceCAD
- mp3
- 피보나치
- Radio
- open weather map
- 배수 더하기
- lirc
- 라즈베리파이
- Raspberry Pi
- 소인수 구하기
- #Project Euler
- project euler
- 최소공배수
- #c언어
- palindrome
Archives
- Today
- Total
ㅇㅅㅇ
프로젝트 오일러(Project Euler) 2번문제 본문
Problem 2
피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?
풀이
피보나치 수열을 프로그래밍 언어로 구현할 때 크게 두가지가 있는데, while문이나 for문을 사용하는 방법이 있고 재귀함수를 사용하여 구현하는 방법이 있다. 반복문을 사용해서 바로바로 더해가는 것이 재귀함수를 사용하는 것보다 빠르지만, 갑자기 재귀함수가 써보고 싶어서 재귀함수로 구현하였다. 아직까진 머리를 쓰는 것보다는 손 스트레칭하는 듯한 난이도...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | int fibo(int i) { int num = i + 1; if (num <= 1) return num; else return fibo(num - 2) + fibo(num - 3); } void main() { int sum = 0, num = 0, i = 2; while (1) { num = fibo(i); if (num > 4000000) break; sum += num; i += 3; } printf("%d\n", sum); } | cs |
결과
재귀함수로 만들어서 그런가 확실히 속도가 많이 느리긴 했다. 한 1초? 가까이 걸린것 같다.
'프로그래밍 > 프로젝트 오일러' 카테고리의 다른 글
프로젝트 오일러(Project Euler) 6번문제 (0) | 2017.06.27 |
---|---|
프로젝트 오일러(Project Euler) 5번문제 (0) | 2017.06.27 |
프로젝트 오일러(Project Euler) 4번문제 (0) | 2017.06.26 |
프로젝트 오일러(Project Euler) 3번문제 (0) | 2017.06.25 |
프로젝트 오일러(Project Euler) 1번문제 (0) | 2017.06.24 |
Comments