迭代算法
中心思想是用旧值递推新值,一直迭代下来进而得到最终解。
典型的有兔子繁殖问题
一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月又开始生下一-代小兔子。假若兔子只生不死,一月份抱来一对刚出生的小兔子,向一年中每个月各有多少对兔子。
简单看,兔子数就是一个斐波那契数列
1 1 2 3 5 8 13 21 34 55 89···
从第三项开始,后一项等于前面两项之和
1+1=2
1+2=3
2+3=5
···
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import java.util.*; import java.math.*; class Fibonacci { void creat() { Scanner order=new Scanner(System.in); int number=order.nextInt(); order.close(); int[] p=new int[number]; BigInteger sum,former,latter,temp; sum=new BigInteger("0"); former=new BigInteger("0"); latter=new BigInteger("1"); temp=new BigInteger("0"); for(int x:p) {//斐波那契数列 sum=sum.add(latter); temp=latter; latter=latter.add(former); former=temp; System.out.println(former+" "); } System.out.println("数列和"+sum); } }
|
1 2 3 4 5 6 7
| public class FibonacciText { public static void main(String[] args) { Fibonacci a=new Fibonacci(); a.creat(); } }
|
采用大数类是为了防止数值过大溢出,另外回忆一下Java的BigInteger写法,大数类原理就是把数值以数组的形式存下来,是一种空间换精度的策略。大数不能用加减符号运算,只能通过调sum()
等方法运算