int strlen(const char* s) {
if (*s == '\0')
return 0;
else
return strlen(s + 1) + 1;
}
\0,長度為 0。strlen("abc") → 1 + strlen("bc") → 1 + 1 + strlen("c") → 1 + 1 + 1 + strlen("") → 1 + 1 + 1 + 0 = 3。| 優點 | 缺點 |
|---|---|
| 程式碼極簡,展示遞迴思維本質 | 空間複雜度 O(n),長字串易導致堆疊溢位 |
| 無額外變數,函數式風格純粹 | 效率低於迴圈版(函數呼叫開銷) |
| 適合教學、面試展示對遞迴理解 | 非尾遞迴,編譯器難以優化為迴圈 |
實際專案請使用標準庫 strlen 或手寫迴圈版:
size_t strlen_iter(const char* s) {
size_t len = 0;
while (*s++) ++len;
return len;
}
遞迴版僅作為演示遞迴定義「問題 = 子問題 + 邊界」的經典範例。