A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 七年锦·旅行 中级黑马   /  2014-5-23 13:21  /  1604 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  各位前辈学长:小白在做这个题时只实现了部分功能,输入数字能打印出对应的数列,但是怎么做才能打印出斐波那契数列的第n项呢?应该怎做?                     希望大神指点迷津


import java.util.Scanner;

/**
* 第2题:求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
* @author HBA
* @date 2014年5月22日
*
*/

public class Test02 {

        public static void main(String[] args) {
               
                //从控制台获取键盘输入
                Scanner input =new Scanner(System.in);
                System.out.print("请输入项数:");
               
                //定义变量n,用来接收从控制台输入的数
                int n = input.nextInt();

                //定义数组,用来存储数据,数组长度即为要输入数字的长度
                int[] fbnq = new int[n];
               
                //用for循环来遍历该数组
                for (int i = 0; i < fbnq.length; i++) {
                       
                        //用if-else语句进行判断,分为两个部分
                        if (i<2) {
                                fbnq[i]=1;
                               
                        }else if(i>=2){
                                fbnq[i]=fbnq[i-2]+fbnq[i-1];
                        }
                       
                        System.out.print(fbnq[i]+" ");
                               
                }
               
               
        }

}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览

你把这段代码跟你的相比较,感受一下,很好理解的~

本帖最后由 Mr._Strange 于 2014-5-24 09:09 编辑

package com.itheima;
/* 3、 求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
*  
* 解答思路:1,仔细观看斐波那契数列,发现数列的n等于前面两个数的和(n>=3)
*     2,求30(n<30)项内的斐波那契数列数,,用到循环来实现
*     3,接收键盘录入的数据
*     4,要包含友好提示,将不正常的数据包含在内
*  注意的地方:因为设定的键盘接收数据类型为Int,所以,输入其它类型,会发生异常错误。
*   且,接收斐波那契数列的数据类型也为int,计算的斐波那契数过大,超出int类型范围会是计算结果不对,最多能计算到第46项斐波那契数。
* */
import java.util.Scanner;
public class Test3 {
public static void main (String[] args){
  Scanner sc = new Scanner(System.in);//接收键盘录入
  while (true){
  System.out.println("请问您要获取的斐波那契数列第几项?");//友好提示语句
  int getNumber =sc.nextInt();//将接收键盘输入进来的int类型传递给getNumber
  if (getNumber<1||getNumber>46){
   System.out.println("您输入的数据有误,请重新输入!");//如果getNumber的数据小于1或者大于46,则提示输入错误,并跳出本次循环,进入下一次循环
   continue;
  }
  int x =0,y=1;//建立数据斐波那契数列第零个数为0,第一个数为1
  for(int n=1;n<getNumber;n++){//循环判断语句,用交换的方法,将y赋给x,将y+x赋给y
    int temp =y;
    y=x+y;
    x =temp;
  }
  System.out.println("斐波那契数列第"+getNumber+"项为:"+y);//输出结果
}
}
}


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
这是我做的这个题,思路是使用递归思想,你理解了我的代码基本就可以理解了,代码如下:
import java.util.Scanner;

/**
*
* 第2题:求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
* 思路;
* 根据规律,从第三项开始,每个数字都是前两个数的和所以可以使用递归的思想去解释!
* @author xhj
*
*/
public class Test02 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                @SuppressWarnings("resource")
                Scanner scanner = new Scanner(System.in);
                while(true){
                        int number = scanner.nextInt();
                        int result = Fibonacci(number);
                        System.out.println("第"+number+"项斐波那契数列是 "+result);
                }
        }
        private static int Fibonacci(int number){
                if(number==1||number==2){
                        return 1;
                }
                return Fibonacci(number-1)+Fibonacci(number-2);
        }

}
希望采纳!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
明日辉煌 发表于 2014-5-24 09:36
这是我做的这个题,思路是使用递归思想,你理解了我的代码基本就可以理解了,代码如下:
import java.util. ...

朋友,这个该如何加入判断条件呢,比如输入负数,0等,就不满足了。谢谢   回答
回复 使用道具 举报
无所谓啦 发表于 2014-5-26 10:37
朋友,这个该如何加入判断条件呢,比如输入负数,0等,就不满足了。谢谢   回答 ...

int number = scanner.nextInt();
int result = Fibonacci(number);
在这两句之间加入一个判断语句:
if(number<=0){
    break;}即可。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马