首页 > 代码库 > 斐波那契数列递归内存溢出如何解决
斐波那契数列递归内存溢出如何解决
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........某一项是前两项的和。使用递归调用时前四十项求解没有问题,但到底五十项的时候会出现内存溢出,求不出结果。所以要想求出更多的项必须使用非递归的方法求解,数据类型不能再是int,可以为double。
1、内存溢出的实例
package test.only; import java.util.Scanner; public class DiGui01 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.print("输入一个正整数:"); int i=sc.nextInt(); double k01=sum01(i); System.out.println("1、第"+i+"项的值为"+k01); sc.close(); } public static double sum01(int i){ if(i<=2) return 1; else return sum01(i-1)+sum01(i-2); }; }
结果(未内存溢出结果):
内存溢出结果
2、修改方法,使用非递归求项,数组。
package test.only; import java.util.Scanner; public class DiGui01 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.print("输入一个正整数:"); int i=sc.nextInt(); double k02=sum02(i); System.out.println("2、第"+i+"项的值为"+k02); //double k01=sum01(i); //System.out.println("1、第"+i+"项的值为"+k01); sc.close(); } public static double sum01(int i){ if(i<=2) return 1; else return sum01(i-1)+sum01(i-2); }; public static double sum02(int i){ double[] a=new double[i+1]; a[2]=a[1]=1; for(int k=3;k<=i;++k) a[k]=a[k-1]+a[k-2]; return a[i]; } }
结果
由图知,斐波那契数列的第50项已经求出。
斐波那契数列递归内存溢出如何解决
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。