程式碼
size_t my_strlen(const char *s)
{
return *s ? 1 + my_strlen(s + 1) : 0;
}
運作原理
- 基底案例:
*s == '\0' 回傳 0。
- 遞迴步驟:目前字元非結束符,長度 = 1 + 子字串長度(
s+1)。
- 編譯器若支援尾端呼叫最佳化(TCO),可轉為迴圈避免堆疊增長;否則最大深度受限於字串長度(通常安全)。
優缺點
| 優點 | 缺點 |
| 程式碼極簡潔、可讀性高 | 堆疊溢位風險(超長字串) |
| 無額外變數、無迴圈 | 效能遜於迴圈版(函數呼叫開銷) |
| 展示遞迴思維 | 嵌入式/核心開發通常禁用遞迴 |
標準庫實作參考(迴圈版)
size_t strlen(const char *s)
{
const char *p = s;
while (*p) ++p;
return p - s;
}
生產環境請直接使用 string.h 提供的 strlen,經過高度最佳化(向量化、對齊讀取)。
- 上一篇文章: 位元操作技巧:16 位元整數位元反轉演算法詳解
- 下一篇文章: 演算法實作:最長無重複字元子字串 — 滑動視窗 + 雜湊表 O(n) 解法
Copyright ©
程式碼之家 All Rights Reserved