用for循环输出斐波那契数列并求前N项之和

原题如下:

 

求斐波那契数列前 n 项的和值 , 斐波那契数列如下:
       1 1 2 3 5 8 13 21 ……
前两位数是 1 ,从第三位开始每位数都是前两位数之和。
import java.util.Scanner;

public class FibNumber {

	public static void main(String[] args) {
		System.out.print("请输入要求的项数N:");
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		int[] f = new int[n];	//定义一个整形数组用于存放斐波那契数,好像用整形当项数N大于45时会发生溢出,产生错误结果
		int sum = 0;			//存放前N项之和
		
		if(n<=0) {				//处理特殊情况n<=0
			System.out.println("项数必须是大与0的整数!");
		} else if(n==1) {		//处理特殊情况n=1
			sum = 1;
			System.out.println("斐波那契数列如下:\n1");
			System.out.println("前" + n + "项之和为: " + sum);
		} else if(n==2) {		//处理特殊情况n=2
			sum = 2;
			System.out.println("斐波那契数列如下:\n1	 1");
			System.out.println("前" + n + "项之和为: " + sum);
		} else {				//处理一般情况n>=3
			System.out.println("斐波那契数列如下:");
			for(int i=0; i<f.length; i++) {
				f[0] = 1;
				f[1] = 1;
				for(int j=3; j<=n; j++)
				f[j-1] = f[j-2] + f[j-3];	//斐波那契数列各项之间的关系,不能用f[j]=f[j-1]+f[j-2],会发生数组越界异常
				System.out.print(f[i] + "\t");
				sum = sum + f[i];
				if((i+1)%12==0) {	//控制12个数为一行
					System.out.println();
				}
			}
			System.out.println();  //输出一个空行再显示前N项之和
			System.out.println("前" + n + "项之和为: " + sum);
		}			
	}
}
 以上做法虽然可以达到目的,但不是最好的办法。大家有更好的方法希望多多交流。

 

你可能感兴趣的:(java)