温馨提示×

通过C语言学习回文的递归和非递归解法比较

小樊
83
2024-04-26 17:49:52
栏目: 编程语言

回文是指一个字符串从前往后读和从后往前读都相同的字符串,比如"level"、"radar"等。在C语言中可以通过递归和非递归两种方式来判断一个字符串是否为回文。

下面是两种方法的比较:

  1. 非递归解法:
#include <stdio.h>
#include <string.h>

int isPalindrome(char str[]) {
    int len = strlen(str);
    for(int i = 0; i < len/2; i++) {
        if(str[i] != str[len-i-1]) {
            return 0;
        }
    }
    return 1;
}

int main() {
    char str[100];
    printf("Enter a string: ");
    scanf("%s", str);
    
    if(isPalindrome(str)) {
        printf("The string is a palindrome.\n");
    } else {
        printf("The string is not a palindrome.\n");
    }
    
    return 0;
}
  1. 递归解法:
#include <stdio.h>
#include <string.h>

int isPalindrome(char str[], int start, int end) {
    if(start >= end) {
        return 1;
    }
    
    if(str[start] != str[end]) {
        return 0;
    }
    
    return isPalindrome(str, start+1, end-1);
}

int main() {
    char str[100];
    printf("Enter a string: ");
    scanf("%s", str);
    
    if(isPalindrome(str, 0, strlen(str)-1)) {
        printf("The string is a palindrome.\n");
    } else {
        printf("The string is not a palindrome.\n");
    }
    
    return 0;
}

递归解法相对于非递归解法更加简洁,但是在处理大量数据时可能会导致栈溢出。非递归解法则更容易理解和实现,适用于大部分情况。在实际应用中,可以根据具体情况选择使用哪种方法。

0