# Find the longest Fibonacci-like subarray of the given array

Given an array of **N** elements, the task is to find the longest subarray which is Fibonacci-like.

A Fibonacci-like sub-array is defined as an array in which:

A[i]=A[i-1]+A[i-2]where i>2 and, A[1] and A[2] can be anything.

**Examples:**

Input :N = 5, arr[] = {2, 4, 6, 10, 2}Output :4 The sub-array 2, 4, 6, 10 is Fibonacci like.Input :N = 3, arr[] = {0, 0, 0}Output :3 The entire array is Fibonacci-like.

**Approach:**

The idea is to observe that any array of length of less than or equal to 2 is Fibonacci-like. Now, for arrays of length greater than 2:

- Maintain a variable
**len**initialized to 2 and a variable**mx**to store the maximum length so far. - Start traversing the array from 3rd index.
- If the fibonacci like array can be extended for this index, i.e. if a[i] = a[i-1] + a[i-2]
- Then increment the value of variable
**len**by 1. - Otherwise reinitialize the variable
**len**to 2. - Store the maximum of mx and len in the variable mx for current iteration.

- Then increment the value of variable

Below is the implementation of the above approach:

## C++

`// C++ program to find length of longest ` `// Fibonacci-like subarray ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find the length of the ` `// longest Fibonacci-like subarray ` `int` `longestFibonacciSubarray(` `int` `n, ` `int` `a[]) ` `{ ` ` ` `// Any 2 terms are Fibonacci-like ` ` ` `if` `(n <= 2) ` ` ` `return` `n; ` ` ` ` ` `int` `len = 2; ` ` ` ` ` `int` `mx = INT_MIN; ` ` ` ` ` `for` `(` `int` `i = 2; i < n; i++) { ` ` ` ` ` `// If previous subarray can be extended ` ` ` `if` `(a[i] == a[i - 1] + a[i - 2]) ` ` ` `len++; ` ` ` ` ` `// Any 2 terms are Fibonacci-like ` ` ` `else` ` ` `len = 2; ` ` ` ` ` `// Find the maximum length ` ` ` `mx = max(mx, len); ` ` ` `} ` ` ` ` ` `return` `mx; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `n = 5; ` ` ` `int` `a[] = {2, 4, 6, 10, 2}; ` ` ` ` ` `cout << longestFibonacciSubarray(n, a); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to find Length of ` `# longest Fibonacci-like subarray ` ` ` `# Function to find the Length of the ` `# longest Fibonacci-like subarray ` `def` `longestFibonacciSubarray(n, a): ` ` ` ` ` `# Any 2 terms are Fibonacci-like ` ` ` `if` `(n <` `=` `2` `): ` ` ` `return` `n ` ` ` ` ` `Len` `=` `2` ` ` ` ` `mx ` `=` `-` `10` `*` `*` `9` ` ` ` ` `for` `i ` `in` `range` `(` `2` `, n): ` ` ` ` ` `# If previous subarray can be extended ` ` ` `if` `(a[i] ` `=` `=` `a[i ` `-` `1` `] ` `+` `a[i ` `-` `2` `]): ` ` ` `Len` `+` `=` `1` ` ` ` ` `# Any 2 terms are Fibonacci-like ` ` ` `else` `: ` ` ` `Len` `=` `2` ` ` ` ` `# Find the maximum Length ` ` ` `mx ` `=` `max` `(mx, ` `Len` `) ` ` ` ` ` `return` `mx ` ` ` `# Driver Code ` `n ` `=` `5` `a ` `=` `[` `2` `, ` `4` `, ` `6` `, ` `10` `, ` `2` `] ` ` ` `print` `(longestFibonacciSubarray(n, a)) ` ` ` `# This code is contributed by Mohit Kumar ` |

*chevron_right*

*filter_none*

## PHP

**Output:**

4

**Time Complexity:** O(N)

**Auxiliary Space**: O(1)

## Recommended Posts:

- Find mean of subarray means in a given array
- Find the longest sub-array having exactly k odd numbers
- Find the Minimum length Unsorted Subarray, sorting which makes the complete array sorted
- Longest subarray with sum divisible by k
- Longest subarray having maximum sum
- Longest subarray such that the difference of max and min is at-most one
- Longest increasing subarray
- Longest Subarray with Sum greater than Equal to Zero
- Longest Subarray having sum of elements atmost 'k'
- Length of the longest alternating subarray
- Length of the longest Subarray with only Even Elements
- Longest subarray not having more than K distinct elements
- Longest Subarray of non-negative Integers
- Longest subarray in which all elements are greater than K
- Longest subarray with elements divisible by k

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.