欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

[剑指offer]面试题第[7]题[JAVA][斐波那契数列][递归]

发布时间:2023/12/10 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [剑指offer]面试题第[7]题[JAVA][斐波那契数列][递归] 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

【问题描述】

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39

【解答思路】

1.递归(面试避免) O(n^2)

public class Solution {public int Fibonacci(int n) {if (n == 0) return 0;if (n == 1) return 1;return Fibonacci(n - 1) + Fibonacci(n - 2);} }
2.一般循环 O(n) 空间复杂度:O(n)
public class Solution {public int Fibonacci(int n) {int ans[] = new int[40];ans[0] = 0;ans[1] = 1;for(int i=2;i<=n;i++){ans[i] = ans[i-1] + ans[i-2];}return ans[n];} }
3.循环优化 O(n) 空间复杂度:O(1)

0 1 1 2 3 5 8
f(6) = f(5) + f(4),只需要保存f(5) , f(4) 由f(5) -f(3) 得出
计算8 = 5+3时,只需要保存5, 3由5-2得出

public class Solution {public int Fibonacci(int n) {int a = 0, b = 1;for (int i = 1; i <= n - 2; i++) {a = a + b;b = a - b;}return a;} }

【总结】

  • 递归需要定义出口,从传递的参数过渡到出口
  • 综合考虑时间复杂度和空间复杂度
  • 总结

    以上是生活随笔为你收集整理的[剑指offer]面试题第[7]题[JAVA][斐波那契数列][递归]的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。