輸入一字串及其長度,判斷是否為迴文(正反讀相同)。採用遞迴:比較首尾字元,相同則遞迴檢查內部子串,直到長度 0 或 1 為基底情況。
#include <stdio.h>
#include <stdlib.h>
int is_palindrome(const char *str, int len) {
printf("Length: %d\n", len);
if (len <= 1) return 1;
printf("%c ----- %c\n", str[0], str[len-1]);
if (str[0] != str[len-1]) return 0;
return is_palindrome(str + 1, len - 2);
}
int main(int argc, char *argv[]) {
if (argc < 3) {
fprintf(stderr, "Usage: %s \n", argv[0]);
return 1;
}
int n = atoi(argv[2]);
if (is_palindrome(argv[1], n))
printf("this string is palindrome!\n");
else
printf("this string is NOT palindrome!\n");
return 0;
}
$ ./palindrome "abcba" 5 Length: 5 a ----- a Length: 3 b ----- b Length: 1 this string is palindrome! $ ./palindrome "abca" 4 Length: 4 a ----- a Length: 2 b ----- c this string is NOT palindrome!
| 特性 | 遞迴版 | 迴圈版 |
|---|---|---|
| 空間複雜度 | O(N) 堆疊幀 | O(1) |
| 程式碼長度 | 極短 | 稍長 |
| 適用場景 | 教學、字串短 | 生產環境、長字串 |