int p(int i, int N)
{
return (i < N && printf("%d\n", i) && !p(i + 1, N)) \
|| printf("%d\n", i);
}
&&
前後的敘述對調,是否影響輸出?
i < N && printf("%d\n", i)
變更為 printf("%d\n", i) && (i < N)
的話,程式輸出為何?void swap(int *a, int *b)
{
int t; t = *a; *a = *b; *b = t;
}
能否避免使用區域變數 t?又,可否改用 bit-wise operator 來改寫?
–>
算術:
*a = *a - *b;
*b = *a + *b;
*a = *b - *a;
邏輯運算:
*a = *a XOR *b
*b = *a XOR *b
*a = *a XOR *b
邏輯運算的好處是,可避免前述算術會遇到的 integer overflow,而且不限定位元數。
char *reverse(char *s)
來反轉 NULL 結尾的字串,限定 in-place 與遞迴參考實作 (都還可以大幅改進,只是列出來給大家看)
C-style string reverse (遞迴 + in-place)
void reverse (char *s) {
if (*s == ’\0’) return;
reverse (s+1);
printf ("%c", *s);
}