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

C語言遞歸實現字符串反轉:reverse_string 完整代碼

     編輯:關於C語言

C語言遞歸實現字符串反轉:reverse_string 完整代碼

利用遞歸調用棧「先進後出」特性,實現字符串反序輸出。不修改原串,僅打印反序結果。

遞歸邏輯

  1. 基線:遇到 '\0' 返回
  2. 遞歸:處理下一字符 reverse_string(str+1)
  3. 回溯:打印當前字符 putchar(*str)

完整代碼

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

void reverse_string(const char *str) {
    assert(str);
    if (*str != '\0') {
        reverse_string(str + 1);  // 先遞歸到末尾
        putchar(*(str));          // 回溯時打印(*(str) 等價 *str)
    }
}

int main() {
    char *arr = "abcdefghigk";
    printf("原串:%s\n", arr);
    printf("反序:");
    reverse_string(arr);
    putchar('\n');
    system("pause");
    return 0;
}

運行結果

原串:abcdefghigk
反序:kighgfedcba

調用棧演示 ("abc")

reverse_string("abc")
  ├─ *str='a' ≠ '\0'
  ├─ reverse_string("bc")
  │   ├─ *str='b' ≠ '\0'
  │   ├─ reverse_string("c")
  │   │   ├─ *str='c' ≠ '\0'
  │   │   ├─ reverse_string("") → *str='\0',返回
  │   │   └─ putchar('c')  → 輸出 c
  │   └─ putchar('b')    → 輸出 b
  └─ putchar('a')        → 輸出 a
最終輸出:cba

注意事項

  • 僅適合輸出,不修改原字符串
  • 長字符串可能棧溢出(>10^4 字符)
  • 若需原地修改,請使用雙指針迭代或純遞歸交換版(見文章 194929)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved