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

1014
2024/4/27 17:49:52
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

回文是指一个字符串从前往后读和从后往前读都相同的字符串,比如"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;
}

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

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: c语言怎么调用sort函数排序