2020-5-1递归练习

2020-5-1递归练习:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

思路:

fun递归函数求从M个数中,选择N个数,
f递归函数是进行N个数全排列

代码:

static int count = 0;

	public static void main(String[] args) {
		char[] a = { '1', '2', '3', '4' };
		boolean h[] = new boolean[100];
		int n = 3;
		char[] b = new char[n];
		fun(a, 0, n, b, h);
		System.out.println(count);
	}
	// k是b数组大小, n选择几个数, h标记b里有没有。
	static void fun(char a[], int k, int n, char b[], boolean h[]) {
		if (k == n) {
			f(b, 0);
		} else if (k < n) {
			for (int i = k; i < a.length; i++) {
				if (!h[i]) {
					b[k] = a[i];
					h[i] = true;
				} else {
					break;
				}
				fun(a, k + 1, n, b, h);
				h[i] = false;
			}
		} else
			return;
	}

	static void f(char a[], int n) {
		if (a.length == n) {
			System.out.println(a);
			count++;
		} else {
			for (int i = n; i < a.length; i++) {
				char c = a[n];
				a[n] = a[i];
				a[i] = c;
				f(a, n + 1);
				c = a[n];
				a[n] = a[i];
				a[i] = c;
			}
		}

	}

组合和排列的计算公式:(有点重要吧)

https://www.cnblogs.com/1024th/p/10623541.html#355821092

我还不会copy别人的Markdown的内容。只好先引用。
我的计算答案
123 132 213 231 321 312 124 142 214 241 421 412 143 134 413 431 341 314 423 432 243 234 324 342
总共24个。根据排列的计算公式A43,可以求出答案是24个,答案肉眼一看好像没有重复

总结

我只能想到这样办法,不知道有没有办法把两个递归改成了一个。递归好难写啊,写了一上午。

原文地址:https://www.cnblogs.com/friend-c/p/12860049.html