编辑代码

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool isPalindrome(char *str, int strLen) {
    if (strLen <= 1) return true;

    if (str[0] == str[strLen - 1]) {
        return isPalindrome(str + 1, strLen - 2);
    }
    return false;
}

bool isPalindromeByStep(char *str, int strLen) {
    if (strLen <= 1) return true;

    for (int i = 0; i <= strLen / 2; i++) {
        if (str[i] != str[strLen - i - 1]) {
            return false;
        }
    }
    return true;
}

int main() {
    char *examples[] = {"abcdedcba", "aba", "racecar", "hello", "world"};

    for (int i = 0; i < sizeof(examples) / sizeof(examples[0]); i++) {
        char *p = examples[i];
        int strLen = strlen(p);

        bool resultRecursive = isPalindrome(p, strLen);
        bool resultIterative = isPalindromeByStep(p, strLen);

        if (resultRecursive) {
            printf("%s is a palindrome (recursive)\n", p);
        } else {
            printf("%s is not a palindrome (recursive)\n", p);
        }

        if (resultIterative) {
            printf("%s is a palindrome (iterative)\n", p);
        } else {
            printf("%s is not a palindrome (iterative)\n", p);
        }
    }

    return 0;
}