Java入门小算法强化基础知识----递归

递归把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量,所以递归是必须要掌握滴。在使用递归时,主要把握递归的方向——边界在哪里?要向着已知方向递归,不然就成了无穷递归,类似死循环!!!

1.一百之间所有数的和

思路:
求1-100的和,先求1-99的和再加上100…求1-2的和,1的和就是1咯,这个1就是边界。

public int sum(int num){
	if(num == 1){
		return 1;
	} else {
		return num + sum(num - 1);
	}
}

2.数列问题

已知有一个数列:f(0)=1,f(1)=4;f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值。
看到这个感觉回到了高中数学,无非就是把题目条件转换为计算机语言。
思路:

题目已经给出边界条件了,当n=0时,f(0)=1,当n=1时,f(1)=4;用一个代换即可将后面的式子转换为:f(n)=2*f(n-1)+f(n-2)。

public class Test {
	public static void main(String[] args) {
		System.out.println(f(10));
	}

	public static int f(int n) {
		if (n == 0) {
			return 1;
		} else if (n == 1) {
			return 4;
		} else {
			return 2 * f(n - 1) + f(n - 2);
		}
	}
}

3.斐波那契数列

输入一个数n,计算斐波那契数列的第n个值1 1 2 3 5 8 13 21 34 55
规律:一个数等于前两个数之和
要求:计算第n个值并打印
思路和上面类似。

package test;

public class Test {
	public static void main(String[] args) {
		System.out.println(f(10));
	}
	public static int f(int n) {
		if (n == 1) {
			return 1;
		} else if (n == 2) {
			return 1;
		} else {
			return f(n - 1) + f(n - 2);
		}
	}
}

4.N阶台阶问题

N阶台阶,一次只能上一阶或者二阶,求上去的所有走法
思路: n等于1只有一种走法,n=2有两种走法。求第n阶,可以从n-1直接一步上去,也可以从n-2两步上去(一步一步走,则与n-1重合了一种),所以f(n)=f(n-1)+f(n-2);

package test;

public class Test {
	public static void main(String[] args) {
		System.out.println(f(4));
	}

	public static int f(int n) {
		if (n == 1) {
			return 1;
		} else if (n == 2) {
			return 2;
		} else {
			return f(n - 1) + f(n - 2);
		}
	}
}

快速排序也用到了递归策略,请查看前面有关数组的博文,最后一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值