এখানে আমরা দেখব কীভাবে চেক করা যায় দেওয়া যোগফল কিছু নন-নেইবারিং ফিবোনাচ্চি সংখ্যা যোগ করে পাওয়া যায় কিনা, যদি হয় তবে সংখ্যাগুলো কী। উদাহরণস্বরূপ, যদি দেওয়া যোগফল ১০ হয়, এটি ৮ এবং ২-এর যোগফল। ৮ এবং ২ উভয় ফিবোনাচ্চি টার্ম এবং সেগুলো এডজেসেন্ট নয়। অ্যালগরিদম দেখে আইডিয়া নেওয়া যাক।
অ্যালগরিদম
nonNeighbourFibo(sum)
Begin
while sum > 0, do
fibo := 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