这个数列从第3项开始,每一项都等于前两项之和。解法可以从递归、马尔科夫、最大值、位数、分治算法(O(log2n))、动态规划(O(n))等方面考虑。常见的面试考题有:兔子生兔子、青蛙跳楼梯、从0开始输入数求斐波那契数列的第n项。
#include<iostream>
using namespace std;
int F(int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
int* ans = new int[n+1];
ans[0] = 0;
ans[1] = 1;
for(int i=2; i<=n; i++)
ans[i] = ans[i-1] + ans[i-2];
int tmp = ans[n];
delete[] ans;
return tmp;
}
#一、从最大值考虑
numMax = int(input('please input a maxnumber : '))
def flibsOne(numMax):
c = []
a, b = 0, 1
while a < numMax:
a, b = b, a + b
c.append(a)
c.remove(c[-1])
print(c)
#二、从位数考虑
num = int(input('please input a number : '))
def flibsTwo(num):
list1 = []
for i in range(num):
if i <= 1:
list1.append(1)
eles:
list1.append(list1[-2] + list1[-1])
return list1
print(flisbTwo(num)) # 输出num位数列