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

C 語言遞迴判斷迴文字串

     編輯:關於C語言

問題描述

輸入一字串及其長度,判斷是否為迴文(正反讀相同)。採用遞迴:比較首尾字元,相同則遞迴檢查內部子串,直到長度 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!

遞迴與迴圈比較

迴圈版參考

int is_palindrome_iter(const char *str, int len) {
    for (int i = 0, j = len - 1; i < j; ++i, --j)
        if (str[i] != str[j]) return 0;
    return 1;
}

注意事項

  • 主程式從命令列參數讀取,argv[1] 為字串,argv[2] 為長度(避免主程式呼叫 strlen)。
  • 遞迴深度受限於堆疊大小,超長字串(>10^5)可能堆疊溢位。
  • 若字串含空白,命令列需加引號:"./palindrome \"a b a\" 5"。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性遞迴版迴圈版
空間複雜度O(N) 堆疊幀O(1)
程式碼長度極短稍長
適用場景教學、字串短生產環境、長字串