利用递归判断回文数

#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,即可收缩地址,实现问题的解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值