斐波那契数列的各种求法

2024-01-20 04:58
文章标签 那契 数列 斐波 求法

本文主要是介绍斐波那契数列的各种求法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

斐波那契数列百科名片
“斐波那契数列”是意大利数学家列昂纳多·斐波那契首先研究的一种递归数列, 它的每一项都等于前两项之和。 此数列的前几项为1,1,2,3,5等等。 在生物数学中,许多生物现象都会呈现出斐波那契数列的规律。斐波那契数列相邻两项的比值趋近于黄金分割数。此外,斐波那契数也以密码的方式出现在诸如《达芬奇密码》的影视书籍中。
目录[隐藏]

【奇妙的属性】
【影视链接】
【相关的数学问题】
【斐波那契数列别名】
斐波那契数列公式的推导
【C语言程序】
【C#语言程序】
【Java语言程序】
【JavaScript语言程序】
【Pascal语言程序】
【PL/SQL程序】
【数列与矩阵】
【数列值的另一种求法】
【数列的前若干项】
【斐波那契数列的应用】 【奇妙的属性】
【影视链接】
【相关的数学问题】
【斐波那契数列别名】
斐波那契数列公式的推导
【C语言程序】
【C#语言程序】
【Java语言程序】
【JavaScript语言程序】【Pascal语言程序】【PL/SQL程序】【数列与矩阵】【数列值的另一种求法】【数列的前若干项】【斐波那契数列的应用】 


  “斐波那契数列(Fibonacci)”的发明者,是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci,生于公元1170年,卒于1240年,籍贯大概是比萨)。他被人称作“比萨的列昂纳多”。1202年,他撰写了《珠算原理》(Liber Abaci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点相当于今日的阿尔及利亚地区,列昂纳多因此得以在一个阿拉伯老师的指导下研究数学。他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯研究数学。斐波那契数列通项公式
  斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、……
  这个数列从第三项开始,每一项都等于前两项之和。它的通项公式为:(见图)(又叫“比内公式”,是用无理数表示有理数的一个范例。)
  有趣的是:这样一个完全是自然数的数列,通项公式居然是用无理数来表达的。
[编辑本段]【奇妙的属性】
  随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的数值0.6180339887……
  从第二项开始,每个奇数项的平方都比前后两项之积多1,每个偶数项的平方都比前后两项之积少1。(注:奇数项和偶数项是指项数的奇偶,而并不是指数列的数字本身的奇偶,比如第五项的平方比前后两项之积多1,第四项的平方比前后两项之积少1)
  如果你看到有这样一个题目:某人把一个8*8的方格切成四块,拼成一个5*13的长方形,故作惊讶地问你:为什么64=65?其实就是利用了斐波那契数列的这个性质:5、8、13正是数列中相邻的三项,事实上前后两块的面积确实差1,只不过后面那个图中有一条细长的狭缝,一般人不容易注意到。
  斐波那契数列的第n项同时也代表了集合{1,2,...,n}中所有不包含相邻正整数的子集个数。
  斐波那契数列(f(n),f(0)=0,f(1)=1,f(2)=1,f(3)=2……)的其他性质:
  1.f(0)+f(1)+f(2)+…+f(n)=f(n+2)-1
  2.f(1)+f(3)+f(5)+…+f(2n-1)=f(2n)
  3.f(2)+f(4)+f(6)+…+f(2n) =f(2n+1)-1
  4.[f(0)]^2+[f(1)]^2+…+[f(n)]^2=f(n)·f(n+1)
  5.f(0)-f(1)+f(2)-…+(-1)^n·f(n)=(-1)^n·[f(n+1)-f(n)]+1
  6.f(m+n)=f(m-1)·f(n-1)+f(m)·f(n)
  利用这一点,可以用程序编出时间复杂度仅为O(log n)的程序。
  7.[f(n)]^2=(-1)^(n-1)+f(n-1)·f(n+1)
  8.f(2n-1)=[f(n)]^2-[f(n-2)]^2
  9.3f(n)=f(n+2)+f(n-2)
  10.f(2n-2m-2)[f(2n)+f(2n+2)]=f(2m+2)+f(4n-2m) [ n〉m≥-1,且n≥1]斐波那契数列
  在杨辉三角中隐藏着斐波那契数列
  1
  1 1
  1 2 1
  1 3 3 1
  1 4 6 4 1
  ……
  过第一行的“1”向左下方做45度斜线,之后做直线的平行线,将每条直线所过的数加起来,即得一数列1、1、2、3、5、8、……
  斐波那契数与植物花瓣
  3………………………百合和蝴蝶花
  5………………………蓝花耧斗菜、金凤花、飞燕草
  8………………………翠雀花
  13………………………金盏
  21………………………紫宛
  34、55、89……………雏菊
  斐波那契数还可以在植物的叶、枝、茎等排列中发现。例如,在树木的枝干上选一片叶子,记其为数0,然后依序点数叶子(假定没有折损),直到到达与那息叶子正对的位置,则其间的叶子数多半是斐波那契数。叶子从一个位置到达下一个正对的位置称为一个循回。叶子在一个循回中旋转的圈数也是斐波那契数。在一个循回中叶子数与叶子旋转圈数的比称为叶序(源自希腊词,意即叶子的排列)比。多数的叶序比呈现为斐波那契数的比。
  斐波那契数列与黄金比
  1/1=1,2/1=2,3/2=1.5,5/3=1.6…,8/5=1.6,…………89/55=1.61818…,…………233/144=1.618055…
[编辑本段]【影视链接】
  斐波那契数列在欧美可谓是尽人皆知,于是在电影这种通俗艺术中也时常出现,比如在风靡一时的《达芬奇密码》里它就作为一个重要的符号和情节线索出现,在《魔法玩具城》里又是在店主招聘会计时随口问的问题。可见此数列就像黄金分割一样流行。可是虽说叫得上名,多数人也就背过前几个数,并没有深入理解研究。
[编辑本段]【相关的数学问题】
  1.排列组合
  有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法?
  这就是一个斐波那契数列:登上第一级台阶有一种登法;登上两级台阶,有两种登法;登上三级台阶,有三种登法;登上四级台阶,有五种登法……
  1,2,3,5,8,13……所以,登上十级,有89种走法。
  2.数列中相邻两项的前项比后项的极限
  当n趋于无穷大时,F(n)/F(n+1)的极限是多少?
  这个可由它的通项公式直接得到,极限是(-1+√5)/2,这个就是黄金分割的数值,也是代表大自然的和谐的一个数字。
  3.求递推数列a(1)=1,a(n+1)=1+1/a(n)的通项公式
  由数学归纳法可以得到:a(n)=F(n+1)/F(n),将斐波那契数列的通项式代入,化简就得结果。
[编辑本段]【斐波那契数列别名】
  斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。
  一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?
  我们不妨拿新出生的一对小兔子分析一下:
  第一个月小兔子没有繁殖能力,所以还是一对;
  两个月后,生下一对小兔民数共有两对;
  三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对;
  ------
  依次类推可以列出下表:
  经过月数:---1---2---3---4---5---6---7---8---9---10---11---12
  兔子对数:---1---1---2---3---5---8--13--21--34--55--89--144
  表中数字1,1,2,3,5,8---构成了一个数列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。
  这个特点的证明:每月的大兔子数为上月的兔子数,每月的小兔子数为上月的大兔子数,即上上月的兔子数,相加。
  这个数列是意大利中世纪数学家斐波那契在<算盘全书>中提出的,这个级数的通项公式,除了具有a(n+2)=an+a(n+1)的性质外,还可以证明通项公式为:an=(1/√5)*[(1+√5/2)^n-(1-√5/2)^n](n=1,2,3.....)
[编辑本段]斐波那契数列公式的推导
  【斐波那契数列通项公式的推导】 斐波那契数列:1、1、2、3、5、8、13、21、……
  如果设F(n)为该数列的第n项(n∈N+)。那么这句话可以写成如下形式:
  F(0) = 0,F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3)
  显然这是一个线性递推数列。
  通项公式的推导方法一:利用特征方程
  线性递推数列的特征方程为:
  X^2=X+1
  解得
  X1=(1+√5)/2,,X2=(1-√5)/2
  则F(n)=C1*X1^n + C2*X2^n
  ∵F(1)=F(2)=1
  ∴C1*X1 + C2*X2
  C1*X1^2 + C2*X2^2
  解得C1=1/√5,C2=-1/√5
  ∴F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}(√5表示根号5)
  通项公式的推导方法二:普通方法
  设常数r,s
  使得F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)]
  则r+s=1, -rs=1
  n≥3时,有
  F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)]
  F(n-1)-r*F(n-2)=s*[F(n-2)-r*F(n-3)]
  F(n-2)-r*F(n-3)=s*[F(n-3)-r*F(n-4)]
  ……
  F(3)-r*F(2)=s*[F(2)-r*F(1)]
  将以上n-2个式子相乘,得:
  F(n)-r*F(n-1)=[s^(n-2)]*[F(2)-r*F(1)]
  ∵s=1-r,F(1)=F(2)=1
  上式可化简得:
  F(n)=s^(n-1)+r*F(n-1)
  那么:
  F(n)=s^(n-1)+r*F(n-1)
  = s^(n-1) + r*s^(n-2) + r^2*F(n-2)
  = s^(n-1) + r*s^(n-2) + r^2*s^(n-3) + r^3*F(n-3)
  ……
  = s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1)*F(1)
  = s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1)
  (这是一个以s^(n-1)为首项、以r^(n-1)为末项、r/s为公比的等比数列的各项的和)
  =[s^(n-1)-r^(n-1)*r/s]/(1-r/s)
  =(s^n - r^n)/(s-r)
  r+s=1, -rs=1的一解为 s=(1+√5)/2,r=(1-√5)/2
  则F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
  迭代法
  已知a1=1,a2=1,an=a(n-1)+a(n-2)(n>=3),求数列{an}的通项公式
  解 :设an-αa(n-1)=β(a(n-1)-αa(n-2))
  得α+β=1
  αβ=-1
  构造方程x²-x-1=0,解得α=(1-√5)/2,β=(1+√5)/2或α=(1+√5)/2,β=(1-√5)/2
  所以
  an-(1-√5)/2*a(n-1)=(1+√5)/2*(a(n-1)-(1-√5)/2*a(n-2))=[(1+√5)/2]^(n-2)*(a2-(1-√5)/2*a1)`````````1
  an-(1+√5)/2*a(n-1)=(1-√5)/2*(a(n-1)-(1+√5)/2*a(n-2))=[(1-√5)/2]^(n-2)*(a2-(1+√5)/2*a1)`````````2
  由式1,式2,可得
  an=[(1+√5)/2]^(n-2)*(a2-(1-√5)/2*a1)``````````````3
  an=[(1-√5)/2]^(n-2)*(a2-(1+√5)/2*a1)``````````````4
  将式3*(1+√5)/2-式4*(1-√5)/2,化简得an=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
  `````
[编辑本段]【C语言程序】
  //利用循环输出前40项
  #include <stdio.h>
  int main()
  {
  long fib[41] = {0,1};
  int i;
  for(i=2;i<41;i++)fib[i] = fib[i-1]+fib[i-2];
  for(i=1;i<41;i++)printf("F%d==%d\n",i,fib[i]);
  getch();
  return 0;
  }
  //利用递归实现指定项输出
  第n项和。(1<n<25)
  #include<stdio.h>
  void main()
  {
  long int f1,f2;
  int n,i,c;
  scanf("%d",&n);
  f1=1;f2=1;
  for(i=1;i<=n;i++)
  {
  c=i+1;
  printf("%dItem=%ld %dItem=%ld ",i,f1,c,f2);
  if(i%2==0)printf("\n");
  f1=f1+f2;
  f2=f2+f1;
  }
  }
[编辑本段]【C#语言程序】
  public class Fibonacci
  {
  //NormRen
  static void Main(string[] args)
  {
  int x = 0, y = 1;
  for (int j = 1; j < 10; j++, y = x + y, x = y - x)
  Console.Write(y + " ");
  }
  }
[编辑本段]【Java语言程序】
  public class Fibonacci
  {
  public static void main(String[] args)
  {
  int x=1,y=1;
  System.out.println(x+" ");
  for(int i=1;i<=20;i++)
  {
  System.out.println(y+" ");
  y=x+y;x=y-x;
  }
  }
  }
[编辑本段]【JavaScript语言程序】
  function Fibonacci(num){
  if(num <= 2){
  return 1;
  }else{
  return Fibonacci(num - 1) + Fibonacci(num - 2)
  }
  }
[编辑本段]【Pascal语言程序】
  递推:
  var
  fib: array[1..40]of longint;
  i: integer;
  begin
  fib[1] := 1;
  fib[2] := 1;
  for i:=3 to 40 do
  fib[i ] := fib[i-1] + fib[i-2];
  for i:=1 to 40 do
  write(fib[i],' ');
  end.
  递归:
  function fib(n:integer):longint;
  begin
  if (n=1) then exit(0);
  if (n=2) then exit(1);
  fib:=fib(n-2)+fib(n-1);
  end;
  高精度: ( 编写BY : AzraelWZJ )
  program fzu1060;
  type arr=array[0..1001]of integer;
  var a,b,c:arr;
  i,j,k,n:integer;
  procedure add(var a,b,c:arr);
  begin
  fillchar(c,sizeof(c),0);
  c[0]:=b[0];
  for i:=1 to c[0] do
  c[i]:=a[i]+b[i];
  for i:=1 to c[0] do
  begin
  c[i+1]:=c[i+1]+(c[i] div 10);
  c[i]:=c[i] mod 10;
  end;
  if c[c[0]+1]>0 then
  begin
  inc(c[0]);
  inc(c[c[0]+1],c[c[0]] div 10);
  c[c[0]]:=c[c[0]] mod 10;
  end;
  a:=b; b:=c;
  end;
  begin
  assign(input,'d:\input.txt');
  assign(output,'d:\output.txt');
  reset(input);
  rewrite(output);
  while not eof do
  begin
  readln(n);
  fillchar(a,sizeof(a),0);
  fillchar(b,sizeof(b),0);
  a[0]:=1; a[1]:=1;
  b[0]:=1; b[1]:=1;
  if n=1 then write(1)
  else
  if n=2 then write(1)
  else
  begin
  for k:=3 to n do
  add(a,b,c);
  for k:=c[0] downto 1 do
  write(c[k]);
  end;
  writeln;
  end;
  close(input);
  close(output);
  end.
  以上程序为 FZU 1060 的标程.
[编辑本段]【PL/SQL程序】
  declare i number :=0;
  j number :=1;
  x number :=1;
  begin
  while x<1000
  loop
  dbms_output.put_line(x);
  x:=i+j;
  i:=j;
  j:=x;
  end loop;
  end;
[编辑本段]【数列与矩阵】
  对于斐波那契数列1、1、2、3、5、8、13、…….有如下定义
  F(n)=f(n-1)+f(n-2)
  F(1)=1
  F(2)=1
  对于以下矩阵乘法
  F(n+1) = 1 1 * F(n)
  F(n) 1 0 F(n-1)
  它的运算就是
  F(n+1)=F(n)+F(n-1)
  F(n)=F(n)
  可见该矩阵的乘法完全符合斐波那契数列的定义
  设1 为B,1 1为C
  1 1 0
  可以用迭代得到:
  斐波那契数列的某一项F(n)=(BC^(n-2))1
  这就是斐波那契数列的矩阵乘法定义。
  另矩阵乘法的一个运算法则A&not;^n(n为偶数)=A^(n/2)* A^(n/2).
  因此可以用递归的方法求得答案。
  时间效率:O(logn),比模拟法O(n)远远高效。
  代码(PASCAL)
  {变量matrix是二阶方阵,matrix是矩阵的英文}
  program fibonacci;
  type
  matrix=array[1..2,1..2] of qword;
  var
  c,cc:matrix;
  n:integer;
  function multiply(x,y:matrix):matrix;
  var
  temp:matrix;
  begin
  temp[1,1]:=x[1,1]*y[1,1]+x[1,2]*y[2,1];
  temp[1,2]:=x[1,1]*y[1,2]+x[1,2]*y[2,2];
  temp[2,1]:=x[2,1]*y[1,1]+x[2,2]*y[2,1];
  temp[2,2]:=x[2,1]*y[1,2]+x[2,2]*y[2,2];
  exit(temp);
  end;
  function getcc(n:integer):matrix;
  var
  temp:matrix;
  t:integer;
  begin
  if n=1 then exit(c);
  t:=n div 2;
  temp:=getcc(t);
  temp:=multiply(temp,temp);
  if odd(n) then exit(multiply(temp,c))
  else exit(temp);
  end;
  procedure init;
  begin
  readln(n);
  c[1,1]:=1;
  c[1,2]:=1;
  c[2,1]:=1;
  c[2,2]:=0;
  if n=1 then
  begin
  writeln(1);
  halt;
  end;
  if n=2 then
  begin
  writeln(1);
  halt;
  end;
  cc:=getcc(n-2);
  end;
  procedure work;
  begin
  writeln(cc[1,1]+cc[1,2]);
  end;
  begin
  init;
  work;
  end.
[编辑本段]【数列值的另一种求法】
  F(n) = [ (( sqrt ( 5 ) + 1 ) / 2) ^ n ]
  其中[ x ]表示取距离 x 最近的整数。
[编辑本段]【数列的前若干项】
  1、 1
  2 、1
  3 、2
  4 、3
  5 、5
  6 、8
  7 、13
  8 、21
  9 、34
  10、 55
  11 、89
  12 、144
  13 、233
  14 、377
  15 、610
  16 、987
  17 、1597
  18 、2584
  19 、4181
  20 、6765
  ......
  斐波那契弧线
  斐波那契弧线,第一,此趋势线以二个端点为准而画出,例如,最低点反向到最高点线上的两个点。三条弧线均以第二个点为中心画出,并在趋势线的斐波纳契水平:38.2%, 50%和61.8%交叉。
  斐波纳契弧线,是潜在的支持点和阻力点水平价格。斐波纳契弧线和斐波纳契扇形线常常在图表里同时绘画出。支持点和阻力点就是由这些线的交汇点得出。
  要注意的是弧线的交叉点和价格曲线会根据图表数值范围而改变因为弧线是圆周的一部分,它的形成总是一样的。
  斐波那契扇形线
  斐波那契扇形线,例如,以最低点反向到最高点线上的两个端点画出的趋势线。然后通过第二点画出一条“无形的(看不见的)”垂直线。然后,从第一个点画出第三条趋势线:38.2%, 50%和61.8%的无形垂直线交叉。
  这些线代表了支撑点和阻力点的价格水平。为了能得到一个更为精确的预报,建议和其他斐波纳契工具一起使用。
[编辑本段]【斐波那契数列的应用】
  数学游戏
  一位魔术师拿着一块边长为8英尺的正方形地毯,对他的地毯匠朋友说:“请您把这块地毯分成四小块,再把它们缝成一块长13英尺,宽5英尺的长方形地毯。”这位匠师对魔术师算术之差深感惊异,因为两者之间面积相差达一平方英尺呢!可是魔术师竟让匠师用图2和图3的办法达到了他的目的!
  这真是不可思议的事!亲爱的读者,你猜得到那神奇的一平方英尺究竟跑到哪儿去呢?
  实际上后来缝成的地毯有条细缝,面积刚好就是一平方英尺。
  斐波那契数列在自然科学的其他分支,也有许多应用。例如,树木的生长,由于新生的枝条,往往需要一段“休息”时间,供自身生长,而后才能萌发新枝。所以,一株树苗在一段间隔,例如一年,以后长出一条新枝;第二年新枝“休息”,老枝依旧萌发;此后,老枝与“休息”过一年的枝同时萌发,当年生的新枝则次年“休息”。这样,一株树木各个年份的枝桠数,便构成斐波那契数列。这个规律,就是生物学上著名的“鲁德维格定律”。
  另外,观察延龄草、野玫瑰、南美血根草、大波斯菊、金凤花、耧斗菜、百合花、蝴蝶花的花瓣,可以发现它们花瓣数目具有斐波那契数:3、5、8、13、21、……
  斐波那契螺旋
  具有13条顺时针旋转和21条逆时针旋转的螺旋的蓟的头部
  这些植物懂得斐波那契数列吗?应该并非如此,它们只是按照自然的规律才进化成这样。这似乎是植物排列种子的“优化方式”,它能使所有种子具有差不多的大小却又疏密得当,不至于在圆心处挤了太多的种子而在圆周处却又稀稀拉拉。叶子的生长方式也是如此,对于许多植物来说,每片叶子从中轴附近生长出来,为了在生长的过程中一直都能最佳地利用空间(要考虑到叶子是一片一片逐渐地生长出来,而不是一下子同时出现的),每片叶子和前一片叶子之间的角度应该是222.5度,这个角度称为“黄金角度”,因为它和整个圆周360度之比是黄金分割数0.618033989……的倒数,而这种生长方式就决定了斐波那契螺旋的产生。向日葵的种子排列形成的斐波那契螺旋有时能达到89,甚至144条。
  三角形的三边关系定理和斐波那契数列的一个联系
  现有长为144cm的铁丝,要截成n小段(n>2),每段的长度不小于1cm,如果其中任意三小段都不能拼成三角形,则n的最大值为多少?
  分析:由于形成三角形的充要条件是任何两边之和大于第三边,因此不构成三角形的条件就是任意两边之和不超过最大边。截成的铁丝最小为1,因此可以放2个1,第三条线段就是2(为了使得n最大,因此要使剩下来的铁丝尽可能长,因此每一条线段总是前面的相邻2段之和),依次为:1、1、2、3、5、8、13、21、34、55,以上各数之和为143,与144相差1,因此可以取最后一段为56,这时n达到最大为10。
  我们看到,“每段的长度不小于1”这个条件起了控制全局的作用,正是这个最小数1产生了斐波那契数列,如果把1换成其他数,递推关系保留了,但这个数列消失了。这里,三角形的三边关系定理和斐波那契数列发生了一个联系。
  在这个问题中,144>143,这个143是斐波那契数列的前n项和,我们是把144超出143的部分加到最后的一个数上去,如果加到其他数上,就有3条线段可以构成三角形了。

这篇关于斐波那契数列的各种求法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/624841

相关文章

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

【练习7】Fibonacci数列

链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66 分析: 当n为15的时候,可以用Math.min(c-n,n-b)来判断哪个是变成斐波那契数的最小步数。 public class Main {public static void main(String[] args) {Scanner i

牛客《剑指Offer》 -- 斐波那契数列

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 思路 对于n=0,应返回0。 class Solution {public:int Fibonacci(int n) {if(n==0) return 0;if(n==1||n==2) return 1;int a=1,b=1,c;n= n-2;for(int i =0

面试题41:和为s的两个数VS和为s的连续正数数列

问题说明: 1.和为s的两个数问题是从一个排序的数组中找出和为s的两个数; 2.原题是找出一个即可,现在全部找出; 3.和为s的连续正数数列是给定一个数找出所有连续正数数列的和为s,例如s为9,(2,3,4)就是其中一组。 (一)和为s的两个数问题 public static int findNumbersWithSum(int[] sorted, int fromIndex, in

跳台阶(动态规划/斐波那契变形)

跳台阶 链接:https://www.nowcoder.com/acm/contest/90/A来源:牛客网 题目描述 小明在坐景驰科技研发的无人车到达了目的地。 景驰科技(JingChi.ai)是一家由人工智能技术驱动、以无人驾驶技术为核心的智能出行公司。它将打造面向中国市场的全无人驾驶。 从无人车下来以后,小明看到了一个长长的楼梯。 有一个n级台阶的楼梯,小明一次可以向上跳1

1037 计算数列和

### 思路 1. 初始化两个变量表示数列的前两项。 2. 使用循环计算数列的前 `n` 项,并累加每一项的值。 3. 输出累加的结果,保留四位小数。 ### 伪代码 1. 初始化 `a = 2.0`,`b = 1.0`,`sum = 0.0` 2. 循环 `n` 次:    - 计算当前项 `current = a / b`    - 将 `current` 加到 `sum`    - 更

【佳佳的斐波那契】

题目 思路 我们的目标是T[n]: ∑ 1 < = i < = n i f [ i ] \; \; \; \; \; \; \; \; \; \;\; \; \; \; \; \; \; \; \; \; \; \; \; \; \;\; \; \; \sum_{ 1<=i <=n} if[i] ∑1<=i<=n​if[i] 我们的迭代目标是: T [ n ] → T

【第0005页 · 贪心】非递减数列

【前言】本文以及之后的一些题解都会陆续整理到目录中,若想了解全部题解整理,请看这里: 第0005页 · 非递减数列         今天我们来看一道 LeetCode 上“广泛好评”的一道 Easy 题!!!(蓝色是 OJ 平台) 【非递减数列】 给你一个长度为 n 的整数数组 nums。请你判断在最多改变 1 个元素的情况下,该数组能否变为一个非递减数列。我们是这样定义一个非递

蓝桥杯入门训练——Fibonacci数列

入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB         问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示F n除以10

求幂级数展开的部分和 / 求分数序列前N项和 / 特殊a串数列求和

习题4-2 求幂级数展开的部分和   (20分) 已知函数e^xe​x​​可以展开为幂级数1+x+x^2 /2! + x^3 /3! + \cdots + x^k /k! + \cdots1+x+x​2​​/2!+x​3​​/3!+⋯+x​k​​/k!+⋯。现给定一个实数xx,要求利用此幂级数部分和求e^xe​x​​的近似值,求和一直继续到最后一项的绝对值小于0.00001。 输入格式: