蓝桥杯练习题 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

简介: 蓝桥杯练习题 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。


题目:


Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。


样例输入

10

样例输出

55


样例输入

22

样例输出

7704


两种方式解决:


第一种递归,但是对于较大的数可能会超时

第二种使用迭代,对于时间复杂度为O(n)


第一种使用递归:


#include <iostream>
using namespace std;
int  fib(int n)
{
  if(n==1)   //第一个出口
  return 1;
  else if(n==2) //第二个出口
  return 1;
  else return fib(n-1)%10007+fib(n-2)%10007;  //因为递推公式为Fn=Fn-1+Fn-2,所以出口会有两个
  //但是会有大量的重复运算,导致大数据运算会超时
}
int main()
{
  int n;
  cin>>n;
  cout<<fib(n);
  return 0;
}



注意:使用递归的话,内存空间不会占太大,但是时间复杂度会很大,很容易输入n过大而导致超时,复杂度为O(2^n)。


第二种使用迭代:


#include <iostream>
using namespace std;
int main()
{
  int n;
  cin>>n;
  long long a[n];
  a[0] = 1,a[1] = 1;
  //直接使用迭代这样的话时间复杂度为O(n),这样的话不会超时,但是如果n大的话,空间复杂度会更大,以空间换时间
  //数组存储的话下标  0  1   2  3  4  5  6  7  8  9
  //分别对应数为     1   1   2  3  5  8 13 21 34 55
  for(int i=2;i<n;i++){
  a[i] = (a[i-2]+a[i-1])%10007;
  }
  cout<<a[n-1]<<endl;
  return 0;
}



注意:这里是创建了数组并且不断保存之前的数据,而不像递归那样有着大量的重复运算,空间换取时间,时间复杂度为O(n)。


题目总结:

对于这道题,更好解决方法应当使用迭代,而不是用递归,递归用于解决较复杂问题会产生更好的效果


相关文章
蓝桥杯:递推 例题:数字三角型问题
蓝桥杯:递推 例题:数字三角型问题
58 0
|
6月前
|
网络安全
蓝桥杯-网络安全-练习题-crypto-rsa
蓝桥杯-网络安全-练习题-crypto-rsa
蓝桥杯-网络安全-练习题-crypto-rsa
|
6月前
|
C语言
蓝桥杯练习题
蓝桥杯练习题包括6道C语言编程题:1. 判断三位数是否为水仙花数;2. 输出区间质因数分解;3. 将秒转换为&#39;H:M:S&#39;格式;4. 判断闰年;5. 删除可被整除元素并排序数组,数字转字母;6. 分类比较两个字符串关系。每题涉及不同逻辑操作,适合编程初学者练习。
46 3
|
5月前
|
存储 算法 前端开发
2019蓝桥杯大赛省赛Java大学B组 数列求值
2019蓝桥杯大赛省赛Java大学B组 数列求值
21 0
|
5月前
|
Java
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
|
6月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 Fibonacci数列
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 Fibonacci数列
39 0
|
6月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 数列特征
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 数列特征
32 0
|
6月前
|
机器学习/深度学习 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-Java全排列公式
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-Java全排列公式
62 0
|
6月前
|
Java 测试技术 C++
第十四届蓝桥杯集训——JavaC组——运算符练习题
第十四届蓝桥杯集训——JavaC组——运算符练习题
73 0
|
算法
[蓝桥杯] 递归与递推习题训练
蓝桥杯比赛只有四十天左右啦,最近会按照模块更新一些有关蓝桥杯算法题。学习算法不仅仅是为了参见比赛,更是以后找工作的一个敲门砖。废话不多说,我们直接看题。
79 0