• 一个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方法的输出哪里,因为在那里调用的,)方法不调用不执行,调用才执行,并把值返回到方法的调用出
                
    
            }
        }
    }

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

    ····················································Wing--九尾狗编辑 http://www.cnblogs.com/wing411/
  • 相关阅读:
    mysql判断一个字符串是否包含某几个字符
    mysql动态sql 整理多个字段
    mysql 把表中某一列的内容合并为一行
    linux基础
    shell基础
    香港主机Squid+Stunnel代理搭建
    mysql字符串根据指定字符分割
    tomcat项目快速启动设置
    Linux系统内存占用90%以上——解决方法
    redis常用命令
  • 原文地址:https://www.cnblogs.com/wing411/p/4703232.html
Copyright © 2020-2023  润新知