斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:1
示例 2:
输入:n = 5
输出:5
提示:
0 <= n <= 100
思路
F(0)=0,F(1)=1,当n>1时,每一项的和都等于前两项的和,F(n)=F(n-1)+F(n-2).
思路1:递归实现
递归实现,空间复杂度过高,会存在需要重复计算的值,因此使用剪枝的操作,避免重复计算。使用HashMap存放第i项的值。
思路2:动态规划
以F(n)=F(n-1)+F(n-2)为转移方程。
代码实现
递归实现:
private HashMap<Integer,Integer> map=new HashMap<>();
public int fib(int n) {
if(n==0||n==1) {
return n;
}
int pre=0;//保存n-1的值
int ppre=0;//保存n-2的值
if(map.containsKey(n-2)) {
//hashmap中存在值 就取出
ppre=map.get(n-2);
} else {
//不存在 计算 插入
ppre=fib1(n-2)