JAVA数字组合

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 (</
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值