首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

遞迴實現 strlen:無需中間變數的極簡寫法

     編輯:關於C語言

程式碼

int strlen(const char* s) {
    if (*s == '\0')
        return 0;
    else
        return strlen(s + 1) + 1;
}

原理解析

  • 基底情況:遇到字串結束符 \0,長度為 0。
  • 遞迴步驟:當前字元非結束符,長度 = 1 + 剩餘子字串長度。
  • 呼叫堆疊: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;
}

遞迴版僅作為演示遞迴定義「問題 = 子問題 + 邊界」的經典範例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved