递归c 语言回文数判断
时间: 2023-12-12 12:05:23 浏览: 152
下面是一个递归实现的C语言回文数判断程序:
```c
#include <stdio.h>
#include <stdbool.h>
bool isPalindrome(int num, int* originalNum) {
if (num == 0) {
return true;
}
if (isPalindrome(num / 10, originalNum) && (num % 10 == (*originalNum) % 10)) {
(*originalNum) /= 10;
return true;
}
return false;
}
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
int originalNum = num;
if (isPalindrome(num, &originalNum)) {
printf("%d 是回文数\n", num);
} else {
printf("%d 不是回文数\n", num);
}
return 0;
}
```
该程序通过递归的方式依次比较数字的最高位和最低位是否相等,如果相等则去掉这两个数字继续递归比较,直到数字变为0或者只有一位。如果每次递归比较都相等,则说明这是一个回文数。
相关问题
c语言递归法判断回文字符串
在 C 语言中,递归法判断回文字符串通常涉及到比较字符串正向和反向是否相等。回文字符串是指从前往后读和从后往前读都一样的字符串。下面是一个简单的递归函数示例:
```c
#include <stdio.h>
#include <string.h>
// 递归函数,用于检查字符串是否回文
int isPalindrome(char str[], int start, int end) {
// 如果字符串长度为0或1,它是回文的
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("请输入一个字符串: ");
fgets(str, sizeof(str), stdin); // 防止换行符
str[strlen(str) - 1] = '\0'; // 去掉fgets添加的换行符
// 判断并打印结果
if (isPalindrome(str, 0, strlen(str) - 1))
printf("%s 是回文\n", str);
else
printf("%s 不是回文\n", str);
return 0;
}
```
用非递归函数和递归函数实现回文数的判定方法
非递归函数实现回文数的判定方法:
```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),因为递归调用时每次都会产生一个新的字符串。
阅读全文