递归生成降序数列

题目:

从键盘输入两个自然数N,R(N>R),要求输入从N到1中按降序顺序取R个自然数的

所有组合个数。
输入:N=5,R=3
输出:543,542,541,532,531,521,432,431,421,321
Total=10

 

回答:

这类题其实都是n个数中取m个数的所有组合衍生

 

public class Test {
	public static void main(String args[]) {
		new Test().go(5, 3);
	}
	
	public void go(int startnumber, int length) {
		for(int i = startnumber; i >= length; i--) {
			generate("", i, length);
		}
	}

	public void generate(String prenumber, int startnumber, int length) {
		if(length == 2) {
			for(int i = startnumber - 1; i > 0; i--) {
				System.out.println(prenumber + startnumber + "" + i);
			}
		} else {
			for(int i = startnumber - 1; i >= length - 1; i--) {
			    generate(prenumber + String.valueOf(startnumber), i, length - 1);
			}
		}
	}
}

 

递归的话定义一个嵌套循环
generate(5, 3) = 5 + generate(4, 2)
  5 + generate(3, 2)
  5 + generate(2, 2)
而generate(startnumber, length)
在这里的概念是生成以startnumber为起始的length个数的所有序列

你可能感兴趣的:(Go)