![]() | 1 sagaxu 2017-07-11 10:03:24 +08:00 via Android ![]() 递归展开哪家强,打开百度搜黑马。 |
![]() | 2 holyghost 2017-07-11 10:06:31 +08:00 via iPhone ![]() 先处理结束条件并返回 然后一次只处理一层 最后尾递归 |
![]() | 3 lotmany 2017-07-11 10:11:17 +08:00 ![]() 不格式化的代码谁会给你看. 就算有人看了,谁看谁傻... |
4 xss 2017-07-11 10:14:24 +08:00 你这个循环还是不要用递归了吧. 也没多少层. 递归开销要比你这个循环大... |
![]() | 5 Lonely 2017-07-11 10:30:42 +08:00 没必要用递归啊 |
6 3pmtea 2017-07-11 11:24:03 +08:00 recursive combinations |
![]() | td width="auto" valign="top" align="left"> |
![]() | 8 Ouyangan 2017-07-11 11:35:05 +08:00 超过两层循环 , 一般不往下看 , 一律重写 . |
10 qscqesze 2017-07-11 11:36:26 +08:00 ![]() int count = 0; void dfs(int x,int deep,int sum){ for(int i=x+1;i<arr.length();i++){ if(deep==4){ count++; System.out.println(sum+arr[i]); }else{ dfs(i,deep+1,sum+arr[i]); } } } void solve(){ dfs(-1,0,0); System.out.println(count); } |
![]() | 12 kzaemrio 2017-07-11 11:46:12 +08:00 ![]() private static int count(int[] array) { return count1(array, array.length, 0, 0); } private static int count1(int[] array, int length, int count, int i0) { if (i0 == length) { return count; } count = count2(array, length, count, i0, i0 + 1); return count1(array, length, count, i0 + 1); } private static int count2(int[] array, int length, int count, int i0, int i1) { if (i1 == length) { return count; } count = count3(array, length, count, i0, i1, i1 + 1); return count2(array, length, count, i0, i1 + 1); } private static int count3(int[] array, int length, int count, int i0, int i1, int i2) { if (i2 == length) { return count; } count = count4(array, length, count, i0, i1, i2, i2 + 1); return count3(array, length, count, i0, i1, i2 + 1); } private static int count4(int[] array, int length, int count, int i0, int i1, int i2, int i3) { if (i3 == length) { return count; } count = count5(array, length, count, i0, i1, i2, i3, i3 + 1); return count4(array, length, count, i0, i1, i2, i3 + 1); private static int count5(int[] array, int length, int count, int i0, int i1, int i2, int i3, int i4) { if (i4 == length) { return count; } System.out.println(String.format( "%d %d %d %d %d", array[i0], array[i1], array[i2], array[i3], array[i4] )); return count5(array, length, count + 1, i0, i1, i2, i3, i4 + 1); } |
![]() | 13 mosliu 2017-07-11 11:49:29 +08:00 #7 楼正解。。。 不过应该吧 sum 改成 String 类型。。 |
![]() | 14 mosliu 2017-07-11 11:57:33 +08:00 ![]() 在#7 上 完善了一下,去除全局。 public static int dfs(int[] arr,int count,int x,int deep,String before){ for(int i=x+1;i<arr.length;i++){ if(deep==4){ count++; System.out.println(before + arr[i]); }else{ count = dfs(arr,count,i,deep+1,before+arr[i]+" "); } } return count; } public static void solve(int[] arr){ int count = dfs(arr,0,-1,0,""); System.out.println(count); } |
16 qien 2017-07-11 12:35:49 +08:00 不需要递归并且一层循环就能搞定 只需要非常基础的数论知识 码农和软件工程师的区别 |
![]() | 17 dphdjy 2017-07-11 14:17:04 +08:00 via Android |
![]() | 20 maomo 2017-07-11 15:30:02 +08:00 可以把这个问题抽象一下:求一个算法,输入模 m 和维度 n,输出所有模 m 下的 n 维向量(a1, a2, ..., an),满足 a1<a2<...<an |
![]() | 21 stillsilly 2017-07-11 15:38:26 +08:00 搜‘数组 排列组合’ |
![]() | 22 winglight2016 2017-07-11 18:20:02 +08:00 不格式化的代码没法看 |
![]() | 24 pagxir 2017-07-11 18:49:13 +08:00 via Android 结果是 C(4,n) |
![]() | 28 pagxir 2017-07-11 22:14:49 +08:00 system.out.println 说的是输出顺序。只考虑总组合数,解法当然可以多变。 |
![]() | 29 pagxir 2017-07-11 22:57:58 +08:00 |
![]() | 30 miao1007 2017-07-11 23:05:21 +08:00 楼主这个是组合排序算法的暴力实现吧,没必要这样搞,真与黑马差距不大了。Groovy 程序设计中,专门讲了用记忆化改善性能,就是你这个的优化版 |