你的位置:首页 > Java教程

[Java教程]一个fibonacci数列简单求和的问题


    前段时间老师在讲函数调用的时候,用Fibonacci数列来演示了一下,因为以前没怎么接触过Fibonacci,所以当时很懵。

    当时让求的是Fibonacci数列中,第N位值为多少,当时老师写的是:

之后呢,老师留的做作业是:求Fibonacci数列前N位的和,晚上自习的时候在想,求和的话必须需要用For循环,懵懵懂懂的写下了以下代码:

public class Fibonacci{  public static void main(String[] args){    int i =5; //声明一个int类型的变量i 并赋值5    int b = 0; //声明一个int类型的变量b 代表和    for(int a = i; a >=1 ; --a){ // for循环:a= i = 5      b += Fibonacci(a); //调用Fibonacci方法 并赋值给b    }      System.out.println( b );  }  public static int Fibonacci(int n){//斐波那契数列代码,此处就不详说了。    if (n == 1) {      return 0;    }    if (n == 2) {      return 1;    }else{      return Fibonacci(n-1) + Fibonacci(n-2);    }  }}

可得出结果,这个地方要感谢图图同学,他告诉我用迭代实现Fibonacci的和,我仔细看了一下,并用此方法得出结果:

public class Fei_Bo_Na_Qi{  public static void main(String[] args){    int m = 5;    System.out.println( "斐波那契数列的 第 "+m+"位数 为: "+m1(m) );// 在输出的时候调用函数  }  public static int m1(int i){  //创建方法     if (i == 1) {  //if如果... 如果等于1 就执行下面java语句      return 0;  // 返回值 为0,返回给m1 并且结束一下java语句    }    if (i == 2) {  //if如果... 如果等于2 就执行下面java语句      return 1;  //返回值 为1 并结束一下Java语句    } else {  //如果不==2 也不==1 就执行一下java语句      int a = 0;  // 在这里代表斐波那契数列的第一个数 用int数据类型 声明一个变量 变量名字为a 并赋值为0      int b = 1;  // 这里代表斐波那契的第二个数      int c = 0;  //这里代表斐波那契的第三个数        int e = 0;      for(int j=3; j <=i ; ++j){ //for循环 这里这个i-2 是什么意思呢?因为如果等于3的时候,是这里运算的第一个,就是等于3的时候,在这里等于1 额 可以这么说吧 因为等于1 和 2 的时候都在上面输出,要是在这里不减去2的话,会循环三次 那就影响结果了        //recycle code block        c=a+b;  // 把a和b的和 赋值给c 因为除了前两位 后面的每一位都是由前两位的和组成的        e+=c;  //这是把前N列的数加起来        System.out.println( a+"+"+b+"斐波那契数列的 第 "+j+" 位 的值为"+"="+c ); //输出 a+b=c        a=b; //b代表数列的第二个,a代表数列的第一个,c代表数列的第三个 我吧b赋值给a a就等于第二个了         b=c;  //再把c赋值给b b就等于数列的第三个了  那么下次循环,c 就是数列的第四个了 一次类推              }      System.out.println( "斐波那契数列的 前 "+ i +" 位数 的和为: "+(e+1) ); //这是输出前N列的和      return c;  //等输出完设置的数列 再把c 返回到m1  再返回到方法的调用出(也就是main方法的输出哪里,因为在那里调用的,)方法不调用不执行,调用才执行,并把值返回到方法的调用出          }  }}

或许有多于步骤和不合理的地方,但已经是现阶段能做的最好的了,望大家多多指导,谢谢!