void primes(int cap) {
for (int i = 2; i < cap; i++) {
int composite = 0;
for (int j = 2; j * j < i; j++)
composite += !(i % j);
if (!composite) printf("%d\t", i);
}
}
合併雙層迴圈,用 t 同時索引 i = t/cap, j = t%cap,以 if-else 替代巢狀結構。
void primes(int cap, int t, int composite) {
int i = t / cap, j = t % cap;
if (i <= 1) primes(cap, t+1, composite);
else if (!j) primes(cap, t+1, j);
else if (j == i && !composite) printf("%d\t", i), primes(cap, t+1, composite);
else if (j > 1 && j < i) primes(cap, t+1, composite + !(i % j));
else if (t < cap*cap) primes(cap, t+1, composite);
}
將所有條件鏈改為巢狀 ?: 運算式,單一回傳陳述式。
直接展開 i = t/cap, j = t%cap 到運算式中,犧牲可讀性換取緊湊度。
void _(int __, int ___, int ____) {
((___/__ )<=1)? _(__,___+1,____) : !(___%__) ? _(__,___+1,___%__) :
((___%__)==(___/__ )&&!____)? (printf("%d\t",___/__),_(__,___+1,____)) :
((___%__) >1 && (___%__) < (___/__))? _(__,___+1,____+!((___/__)%(___%__))) :
(___ < __*__)? _(__,___+1,____) : 0;
}
將常數 1 改為額外參數 _____,進一步抽象化。
for→while→遞迴、if→?: 、消除暫存變數、單字母/底線命名、常數參數化本文僅供娛樂與反面教材,實際專案請追求清晰、可維護、可測試的代碼風格。