工程一旦變大,隨之而來的就是許多想象不到的過程。一個一萬個類的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果然是一個研究算法最好的語言。