斐波那契数列
题目描述
斐波那契数列是一个非常著名的数列,它的定义如下:F(0)=0,F(1)=1,对于n≥2,F(n)=F(n-1)+F(n-2)。也就是说,斐波那契数列的第n项等于前两项之和。本问题要求计算斐波那契数列的第n项。
输入格式
输入共 1 行,包含一个非负整数 n。
输出格式
输出共 1 行,包含斐波那契数列的第 n 项的值。
数据范围
0 ≤ n ≤ 90
输入样例1:
1 | 10 |
输出样例1:
1 | 55 |
输入样例2:
1 | 50 |
输出样例2:
1 | 12586269025 |
注意事项
- 斐波那契数列的增长速度非常快,所以需要使用能够处理大整数的数据类型,如long long。
- 递归方法计算斐波那契数列会有大量的重复计算,时间复杂度为O(2^n),不适合计算较大的n值。
- 迭代方法可以避免重复计算,时间复杂度为O(n),空间复杂度为O(1)。
代码实现
1 |
|
时间复杂度
- 递归版本时间复杂度:O(2^n),其中 n 为输入的非负整数。
- 迭代版本时间复杂度:O(n),其中 n 为输入的非负整数。
- 空间复杂度:O(1)(迭代版本)或 O(n)(递归版本,由递归调用栈占用的空间)。
代码解释
- 递归方法计算斐波那契数列的思想很简单,但存在大量的重复计算,时间复杂度为指数级,不适合计算较大的n值。
- 迭代方法通过保存前两项的结果来避免重复计算,时间复杂度为线性,适合计算较大的n值。
- 在代码中,我们使用 long long 类型来存储中间结果和最终结果,以避免在处理较大的n值时发生溢出。
- 对于n≤90的情况,long long 类型足够存储斐波那契数列的值。如果n更大,可能需要使用大数运算库。