网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
1 概述
Fibonacci sequence, the sequence of numbers 1, 1, 2, 3, 5, 8, 13, 21, …, each of which, after the second, is the sum of the two previous numbers; that is, the nth Fibonacci number F(n) = F(n − 1) + F(n − 2).
The sequence was noted by the medieval Italian mathematician Fibonacci (Leonardo Pisano) in his Liber abaci.
2 相关问题
2.1 Fibonacci Number
题目描述:
已知有一个Fibonacci sequence,给定n作为数列的位置,求该位置的数值。
此题通常有三种解法,分别为:递归法、数组法(内存法)及平推法(循环法)。
下面分别给出这三种解法的示例代码。
2.1.1 递归法
使用递归法解决Fibonacci Number问题的示例代码如下:
class Solution {
public:
// calculate the value with recursion
int fib(int n) {
if (0 == n || 1 == n) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
};
递归法对应的时间复杂度为:O(2^n),空间复杂度为:O(n)。
2.1.2 数组法(内存法)
使用数组法解决Fibonacci Number问题的示例代码如下:
class Solution {
public:
// dynamic programming approach
int fib(int n) {
if (n < 2) {
return n;
}
int mem[n + 1];
mem[0] = 0;
mem[1] = 1;
for (int i = 2; i <= n; i++) {
mem[i] = mem[i - 1] + mem[i - 2];
}
return mem[n];
}
};
数组法对应的时间复杂度为:O(n),空间复杂度为:O(n)。
2.1.3 平推法(循环法)
使用平推法解决Fibonacci Number问题的示例代码如下:
class Solution {
public:
// with imperative approach
int fib(int n) {
if (n < 2) {
return n;
}
int prevprev = 0;
int prev = 1;
int cur = 0;
for (int i = 1; i < n; i++) {
cur = prevprev + prev;
prevprev = prev;
prev = cur;
}
![img](https://img-blog.csdnimg.cn/img_convert/d6547eb83a61a666949349a31c010ea6.png)
![img](https://img-blog.csdnimg.cn/img_convert/dfa1fdf0f73a6019ad27898c8678ddbe.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
t/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**