利用遞歸調用棧「先進後出」特性,實現字符串反序輸出。不修改原串,僅打印反序結果。
reverse_string(str+1)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
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