简单的理解递归

递归设计经验

	1.找重复(子问题)
	2.找重复中的变化量-->参数
	3.找参数变化趋势-->设计出口

递归基础练习

求阶乘

	private static int f1(int n) {
		if (n == 1) {
			return 1;
		}
		
		return n * f1(n - 1);
	}

打印i~j

	private static void f2(int i, int j) {
		if (i > j) {
			System.out.println();
			return;
		}
		System.out.print(i + " ");
		f2(i + 1, j);

	}

对数组的所有元素求和

	private static int f3(int[] a, int begin) {
		//begin等于最后一个元素下标
		if (begin == a.length - 1) {
			return a[begin];
		}

		return a[begin] + f3(a, begin + 1);
	}

翻转字符串

	private static String f4(String str, int end) {
		if (end == 0) {
			return str.charAt(0) + "";
		}

		return str.charAt(end) + f4(str, end - 1);

	}

多分支递归:斐波那契数列

    等价于两个子问题:
        求前一项
        求前二项
        两项求和
	private static int fib(int n) {
		if (n == 1 || n == 2) {
			return 1;
		}

		return fib(n - 1) + fib(n - 2);
	}

巧用递推公式解最大公约数

	private static int gcd(int m, int n) {
		if (n == 0) {
			return m;
		}

		return gcd(n, m % n);
	}

主函数

	public static void main(String[] args) {
		System.out.println(f1(4));
		System.out.println("-------------");
		f2(1, 10);
		System.out.println("-------------");
		System.out.println(f3(new int[]{1,2,3,4,5},0));
		System.out.println("-------------");
		System.out.println(f4("abcd",3));
		System.out.println("-------------");
		System.out.println(fib(6));
		System.out.println("-------------");
		System.out.println(gcd(9,6));
		System.out.println("-------------");
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值