1
sagaxu 2017-07-11 10:03:24 +08:00 via Android 2
递归展开哪家强,打开百度搜黑马。
|
2
holyghost 2017-07-11 10:06:31 +08:00 via iPhone 1
先处理结束条件并返回
然后一次只处理一层 最后尾递归 |
3
sunsulei 2017-07-11 10:11:17 +08:00 4
不格式化的代码谁会给你看.
就算有人看了,谁看谁傻... |
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
|
7
Chaos11 2017-07-11 11:31:09 +08:00 1
|
8
Ouyangan 2017-07-11 11:35:05 +08:00
超过两层循环 , 一般不往下看 , 一律重写 .
|
9
jiangzhuo 2017-07-11 11:36:17 +08:00
|
10
qscqesze 2017-07-11 11:36:26 +08:00 1
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 1
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 1
在#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 程序设计中,专门讲了用记忆化改善性能,就是你这个的优化版
|