斐波拉契数列求第n项的值

【斐波拉契数列求第n项的值】:1 1 2 3 5 8 13 …公式:f(n)=f(n-1)+f(n-2);

#include<stdio.h>
   int fobonacci(int n)
{
   //确定出口
   if(n == 1 || n == 2)
   {
       return 1;
   }
   else
   {
       return fobonacci(n-1)+fobonacci(n-2);
   }
}
   int main()
{
   int n;
   scanf("%d",&n);
   printf("%d ",fobonacci(n));
   return 0;
}
计算斐波那契数列的第n可以采用多种方法,以下是几种常见的实现方式: ### 递归法 递归是一种直观但效率较低的方法。由于每次调用都会产生两次额外的递归调用,因此时间复杂度为O(2^n)。 ```java public class Fibonacci { public static int fib1(int n) { if (n == 1 || n == 2) { return 1; } return fib1(n - 1) + fib1(n - 2); } public static void main(String[] args) { System.out.println(fib1(10)); // 示例输出第10 } } ``` ### 迭代法 迭代方法通过循环来计算斐波那契数列,避免了递归中的重复计算问题,时间复杂度为O(n),空间复杂度为O(1)。 ```java public class Fibonacci { public static int fib2(int n) { if (n == 1 || n == 2) { return 1; } int a = 1, b = 1, c = 0; for (int i = 3; i <= n; i++) { c = a + b; a = b; b = c; } return b; } public static void main(String[] args) { System.out.println(fib2(10)); // 示例输出第10 } } ``` ### 动态规划法 动态规划方法利用数组存储中间结果,从而避免重复计算,时间复杂度为O(n),空间复杂度也为O(n)。 ```java public class Fibonacci { public static long fib3(int n) { long[] arr = new long[n]; arr[0] = 1; arr[1] = 1; for (int i = 2; i < arr.length; i++) { arr[i] = arr[i - 1] + arr[i - 2]; } return arr[n - 1]; } public static void main(String[] args) { System.out.println(fib3(10)); // 示例输出第10 } } ``` ### 快速幂法 快速幂方法基于矩阵快速幂的思想,可以在O(log n)的时间复杂度内计算斐波那契数列,适用于非常大的n。 ```python def matrix_mult(a, b): # 矩阵乘法 result = [[0]*2 for _ in range(2)] for i in range(2): for j in range(2): result[i][j] = sum(a[i][k] * b[k][j] for k in range(2)) return result def matrix_pow(matrix, power): # 矩阵快速幂 result = [[1, 0], [0, 1]] # 初始化为单位矩阵 while power > 0: if power % 2 == 1: result = matrix_mult(result, matrix) matrix = matrix_mult(matrix, matrix) power //= 2 return result def fib4(n): if n == 0: return 0 elif n == 1 or n == 2: return 1 else: matrix = [[1, 1], [1, 0]] powered_matrix = matrix_pow(matrix, n - 2) return powered_matrix[0][0] print(fib4(10)) # 示例输出第10 ``` 以上是几种常用的计算斐波那契数列第n的方法[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值