用非递归函数和递归函数实现回文数的判定方法
时间: 2023-10-26 22:07:37 浏览: 73
非递归函数实现回文数的判定方法:
```python
def is_palindrome(num):
num_str = str(num)
for i in range(len(num_str) // 2):
if num_str[i] != num_str[-i - 1]:
return False
return True
```
递归函数实现回文数的判定方法:
```python
def is_palindrome(num):
num_str = str(num)
if len(num_str) <= 1:
return True
if num_str[0] != num_str[-1]:
return False
return is_palindrome(num_str[1:-1])
```
这两个函数都是接受一个整数作为参数,返回一个布尔值表示该整数是否为回文数。其中,非递归方法先将整数转换成字符串,然后对字符串进行比较,时间复杂度为O(n/2),空间复杂度为O(n);递归方法则使用字符串切片来递归地进行比较,时间复杂度同样为O(n/2),但空间复杂度则为O(logn),因为递归调用时每次都会产生一个新的字符串。
相关问题
判断回文数的递归函数c++
判断回文数的递归函数c是一个能够判断一个整数是否为回文数的函数,实现的方法是将这个整数转换成字符串,然后判断字符串的左右两端是否相等,若相等则递归地判断字符串的中间子串是否为回文数。
在c语言中,可以使用逆序字符串进行比较,若字符串相同则为回文数。具体实现如下:
int isPalindrome(char* s) {
int len = strlen(s);
if (len <= 1) {
return 1;
}
else if (s[0] == s[len - 1]) {
s[len - 1] = '\0';
return isPalindrome(s + 1);
}
else {
return 0;
}
}
该函数首先判断字符串的长度是否小于等于1,如果是,则返回1表示该字符串是回文数。接着判断字符串的左右两端是否相等,如果相等,则递归地判断子串是否为回文数。如果不相等,则返回0表示该字符串不是回文数。
C语言写一个递归函数判断字符串s是否为回文串
在C语言中,你可以通过递归的方式来编写一个函数检查一个字符串是否是回文串。回文串是指正读反读都一样的字符串。下面是一个简单的递归函数示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isPalindrome(char s[], int start, int end) {
// 基线条件:当start等于end时,说明已经检查了整个字符串,它是回文的
if (start >= end)
return true;
// 检查第一个字符和最后一个字符是否相等,如果不同则不是回文
if (s[start] != s[end])
return false;
// 如果首尾字符相等,继续递归检查中间部分
return isPalindrome(s, start + 1, end - 1);
}
int main() {
char str[] = "abcba";
if (isPalindrome(str, 0, strlen(str) - 1))
printf("%s is a palindrome.\n", str);
else
printf("%s is not a palindrome.\n", str);
return 0;
}
```
在这个`isPalindrome`函数中,我们传入起始位置`start`和结束位置`end`作为参数,每次递归都会检查这两个位置的字符是否相同,并将范围缩小到剩余部分。如果整个过程中所有字符都匹配,则返回`true`,表示是回文;反之则返回`false`。
阅读全文