再帰を理解するのは簡単

再帰的な設計経験

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

再帰的な基礎訓練

階乗

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

私は〜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("-------------");
	}
公開された60元の記事 ウォンの賞賛4 ビュー1289

おすすめ

転載: blog.csdn.net/qq_43966129/article/details/104951397