zoukankan      html  css  js  c++  java
  • 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个,答案肉眼一看好像没有重复

    总结

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

  • 相关阅读:
    Pandas怎样按条件删除行?
    分享一个百度大牛的Python视频系列下载
    Python的几个高级编程技巧
    Pandas系列-读取csv/txt/excel/mysql数据
    判断质数
    mac命令行光标操作快捷键
    私有Docker部署GitLab重置管理员密码
    noip2012借教室
    乘法逆元
    noip2008T2 火柴棒等式
  • 原文地址:https://www.cnblogs.com/friend-c/p/12860049.html
Copyright © 2011-2022 走看看