利用递归或集合(数组)求斐波那契数列的第20项和前20项的和

著名的斐波那契数列,即每一项都等于前两项之和

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765
首先是集合(数组)方法,原理是先将前两项添加到集合(数组)内,从第三项开始,就可以用前两项之和来获得,如此循环,想得到前几项的和就改变for循环的执行次数就ok,得到某一项也是如此.
数组和下面的方法类似,就不赘述了,只需将add方法改成为某个下标赋值就行了,值得一提的是数组不能动态改变长度,所以一开始就要定义好数组的长度.

public static void main(String[] args) {
		ArrayList<Integer> list=new ArrayList<>();
		int count=0;
		list.add(1);
		list.add(1);
		for(int i=0;i<18;i++) 
		{
			list.add(list.get(i)+list.get(i+1));
		}
		for(int a:list) 
		{
			count=count+a;
		}
		System.out.println("数组");
		System.out.println("前20项的和为:"+count);
		System.out.println("第20项的值为:"+list.get(19));
	}

运行结果如下
在这里插入图片描述

接下来是使用递归方法

public static void main(String[] args) {
		int count=0;
		for(int i = 1;i <= 20;i++) {
			count=count+number(i);
		}
		System.out.println("递归");
		System.out.println("第20项是"+number(20));
		System.out.print("前20项的和为:"+count);
	}

	public static int number(int num) {
		if(num == 1 || num == 2) {
			return 1;
		}else {
			return number(num - 2) + number(num - 1);
		}
	}

执行结果如下:
在这里插入图片描述
和数组方法一样,自定义长度只需修改循环次数就ok了.注意:递归一定要设置结束条件,否则会无限循环

你可能感兴趣的:(Java,java,算法)