斐波那契数列的三种算法
来源:互联网 发布:中国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
- 斐波那契数列的三种算法
- 斐波那契数列三种算法(fibonacci)
- 斐波那契数列算法的三种C#实现及时间复杂度分析
- 斐波那契数列的三种算法以及复杂度
- 斐波那契数列的三种求法
- 实现斐波那契数列的三种方法
- 斐波那契数列的三种解决方案
- 斐波那契数列 的三种实现方法
- 斐波那契数列的三种实现方式
- 斐波那契数列实现的三种方法
- 斐波那契数列的三种实现方法
- “斐波那契数列”的两种算法
- “斐波那契数列”的两种算法
- “斐波那契数列”的两种算法
- 斐波那契数列数列的三种时间复杂度的实现方法
- 斐波那契数列-java编程:三种方法实现斐波那契数列
- 斐波那契数列-java编程:三种方法实现斐波那契数列
- 斐波那切数列的三种解法
- [高精度 递归] BZOJ 2930 [Poi1999]梦游者 Sleepwalker
- iOS开发 - 渐变导航条升级版(判断滚动的方向和改变方向时的位置)
- java 中的 sql 单引号双引号拼接变量
- Android软键盘监听KeyboardWatcher
- 最大和子矩阵
- 斐波那契数列的三种算法
- 【SSLGZ 1762】工厂的烦恼
- 6.7 Swift闭包捕获值
- Linux定时任务
- js调试
- mpstat 命令详解
- mysql+tomcat+jsp增删改查(二)
- assert和de-assert的理解
- Redis列表类型的操作