JAVA数字组合题目
//下附完整代码
题目:
#排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。
现要求你用递归的方法输出所有组合。
例如n=5,r=3,所有组合为:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
这里我的思路是用二叉树的方法实现
先输出再递归,
//g代表箭头指在第几个数
zh[g] = zh[g] + i;
for (int j = 1; j <= y; j++)
{
System.out.print(zh[j]);}
System.out.println();
箭头定在第3个数字,这个数又不能等于后一个数,所以如果箭头这个数<(后一位数-1)就让箭头这个数+1,但是一开始的数组是从zh[[1]]开始就是12345,第3个数后面是4这样论下去是到不了125的,所以我让第4个数等于最后一个数再+1。即数组从zh[[1]]开始为{1,2,3,6,5}
用两条递归调用语句实现
第一条递归:
如果箭头所在数<(后一个数-1),就让箭头所在的数+1然后调用自己输出数组的1到3,也就是124,再执行一次箭头数+1输出125,
就相当于是输出左子树
//g代表箭头指在第几个数
if (zh[g] < zh[g + 1] - 1)//g代表箭头指在第几个数
递归(zh, x,y, 1, g);
这时候箭头上的数是5已经不满足if语句里的条件了就到了第二条递归:
如果箭头前一个数小于箭头这个数就让箭头指向前一个数就是下图中的(g-1),因为g就代表箭头指的第几个数。调用自己再将箭头指的数+1输出来就是135。
然后135又重复第一条递归:如果箭头所在数<(后一个数-1),就让箭头所在的数+1然后调用自己输出数组的1到3
就相当于右子树
if (</