工程一旦变大,随之而来的就是许多想象不到的过程。一个一万个类的java工程,全部编译一次的时间大约是20分钟。如果不去掉这个该死的勾,每次重新打开eclipse,第一次运行都要重新编译,一天浪费的时间就是半个多小时到一个小时不等。
要求数列[1,2,3]子集,结果应该如下(顺序无关):
[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]
如果用C语言求解,在CSDN上找到别人的代码如下
1 #define N 4
2 #include <stdio.h>
3 int used[N]={0};//加上
4
5 void output()
6 {
7 int i;
8 for(i=0;i<N;i++)if(used[i])printf("%d ",i+1);
9 printf("\n");
10 }
11
12 void f(int i)
13 {
14 if(i>=N)
15 {
16 output();
17 return;
18 }
19 f(i+1);
20 used[i]=1;
21 f(i+1);
22 used[i]=0;//加上
23 }
24
25 void main()
26 {
27 f(0);
28 getchar();
29 }
如果是Haskell呢?(不包括空集)
1 subsets :: [a] -> [[a]]
2 subsets [x] = [[x]]
3 subsets (x:xs) = [x] : [x:i|i<-s]++ s
4 where s = subsets xs
除去声明就三行还可以缩减到2行。且含义清楚。Haskell果然是一个研究算法最好的语言。