#include<stdio.h>
#include<string.h>
#define SIZE 100
int isPalindrome(char arr[], int len);
int main()
{
char str[SIZE];
scanf_s("%s",str,SIZE);
int length = strlen(str);
if (isPalindrome(str, length))
{
printf("Yes");
}
else
{
printf("No");
}
return 0;
}
int isPalindrome(char arr[], int len)
{
if (len == 1)
{
return 1;
}
else if (len == 2)
{
if (arr[0] == arr[1])
return 1;
else
return 0;
}
else
{
if (arr[0] == arr[len - 1] && isPalindrome(arr + 1, len - 2))
{
return 1;
}
else
return 0;
}
}
头歌上的一道题目,感觉思路突然特别顺畅,就10min就写出来了。
联想到之前看别人递归的思想,就是将问题分治,分成可重复的问题,每次解决的问题都由一个小问题和相同的小范围的问题构成,这就是我们利用递归解决问题的思路。
因而我们将判断一个字符串是否为回文数的问题分解为判断最外层两个字符是否相同和内层字符串是否为回文数的组合——而这个问题便是一个相同的小范围问题,因而可重复。
同时设置好基准情况即字符串长度为1或2的情况,这是不需要递归就要直接可判断的情况。
这里有个指针的小技巧,即我们每次递归将数组名+1,即可收缩地址,实现问题的解决。