Zeckendorf定理的C ++程序?

在这里,我们将看到如何通过添加一些不相邻的斐波那契数来检查是否找到了给定的总和,如果有的话,数字是多少?例如,如果给定总和值为10,则这是8和2的总和。8和2都是斐波那契项,并且它们不相邻。让我们看一下获得想法的算法。

算法

nonNeighbourFibo(总和)

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;
   //得到小于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