斐波那契数列的三种算法

来源:互联网 发布:中国2015gdp数据 编辑:程序博客网 时间:2024/06/05 23:50

第一种:递归调用---输出第n项的值 以及前n项中每一个数

代码如下:

public class Demo {public static void main(String[] args) {//输出第n项的值Scanner scan = new Scanner(System.in);System.out.println("请输入第n项的值:");int n = Integer.parseInt(scan.nextLine().trim());System.out.println("f("+n+")="+f(n));//输出前n项所有数据 每10个换一行for(int i=1;i<=n;i++){System.out.print(f(i)+"\t");if(i%10==0){System.out.println();}}}/** * 传入参数n  返回值类型为long,若为int可能出现溢出 */public static long f(int n){if(n == 1 || n == 2){//参数1或者2时return 1;}else{return f(n - 1) + f(n - 2);}}}
测试结果为:
请输入第n项的值:30f(30)=832040112358132134558914423337761098715972584418167651094617711286574636875025121393196418317811514229832040

当参数过大时,递归调用的性能就大大减弱了,所以不建议使用该方法

第二种:利用数组---输出第n项的值 以及前n项中每一个数

代码如下:

public class Demo3 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入第n项的值:");int n = Integer.parseInt(scan.nextLine().trim());long[] arr = new long[n];switch(n){case 1:arr[0] = 1;break;case 2:arr[0] = 1;arr[1] = 1;break;default:arr[0] = 1;arr[1] = 1;for(int i=2;i<n;i++){arr[i] = arr[i-1] + arr[i-2];}}//输出请第n项的值:System.out.println("f("+n+")="+arr[arr.length-1]);////输出前n项所有数据 每10个换一行for(int i=0;i<arr.length;i++){if(i%10==0 && i!=0){System.out.println();}System.out.print(arr[i]+"\t");}}}
测试结果如下:

请输入第n项的值:30f(30)=832040112358132134558914423337761098715972584418167651094617711286574636875025121393196418317811514229832040

第三种:利用三个参数a b c---输出第n项的值 以及前n项中每一个数

代码如下:

public class Demo4 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入:");int n = Integer.parseInt(scan.nextLine().trim());//设置a b c 的初始值 在后面的代码中使a b c 的值不断变化 long a =1,b = 1,c = 0;System.out.print("前"+n+"项为:\n"+a+"\t"+b+"\t");for(int i=3;i<=n;i++){//此处要减去两项c = a + b;a = b;b = c;System.out.print(c+"\t");if(i%10==0){System.out.println();}}//输出请第n项的值:System.out.println("\n"+"f("+n+")="+c);}}

测试结果如下:

请输入:32前32项为:11235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309f(32)=2178309






0 0
原创粉丝点击