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个,答案肉眼一看好像没有重复

    总结

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

  • 相关阅读:
    SSH框架中使用注解和xml配置的区别
    web项目中log4j的配置
    嵌入式—ASCII码
    MATLAB
    MATLAB
    MATLAB
    MATLAB
    CentOS 7将网卡名称eno16777736改为eth0
    图像增强处理
    Debussy与modelsim联仿时 do 文件脚本
  • 原文地址:https://www.cnblogs.com/friend-c/p/12860049.html
Copyright © 2011-2022 走看看