여기서 우리는 이웃하지 않은 피보나치 수를 추가하여 주어진 합계를 찾았는지 여부를 확인하는 방법을 볼 것입니다. 그렇다면 숫자는 무엇입니까? 예를 들어, 주어진 합계 값이 10이면 이것은 8과 2의 합입니다. 8과 2는 모두 피보나치 항이며 인접하지 않습니다. 아이디어를 얻을 수 있는 알고리즘을 살펴보겠습니다.
알고리즘
비NeighbourFibo(합계)
Begin while sum > 0, do fibo := greatest Fibonacci term but not greater than sum print fibo sum := sum - fibo done End
예시
#include<iostream> using namespace std; int fibonacci(int n) { if (n == 0 || n == 1) return n; // get the greatest Fibonacci Number smaller than n. int prev = 0, curr = 1, next = 1; while (next <= n) { prev = curr; curr = next; next = prev + curr; } return curr; } void nonNeighbourFibo(int sum) { while (sum > 0) { int fibo = fibonacci(sum); cout << fibo << " "; sum = sum - fibo; } } int main() { int sum = 120; cout << "Sum is same as Non-adjacent Fibonacci terms: "; nonNeighbourFibo(sum); }
출력
Sum is same as Non-adjacent Fibonacci terms: 89 21 8 2