程序源代码:
package math;
public class Eo {
public static void jun(String s,int n,int m)
{
if(n==0||n==1||m==n)//判断递归结束条件,n等于零或为一(字符串只有一个或空 的一定是回文),n与m相等(从开头的字符一一对应着 从末尾的字符)
{
System.out.println("回文");
}
else
{
if(s.charAt(m)!=s.charAt(n))//如果两端的字符不相等结束递归输出不是 回文
{
System.out.println("不是回文");
}
else if(s.charAt(m)==s.charAt(n))//如果两端的字符相等继续递归
{
jun(s,n-1,m+1); //问题规模减小
}
}
}
public static void main( String args[] )
{
String s="woyihokhiyow";
int n=s.length();
int m=0;
jun(s,n-1,m);
}
}
运行截图:
主要思路:
解析题目要求--判断是否是回文
1、给出的提示是只有一个或零个字符的字符串一定是回文,故这可以作为递归结束的终止条件
2、给出的提示是如果从开头的字符一一对应着从末尾的字符就是回文也可以作为递归结束的终止条件
3、如果有字符不相等就结束递归输出不是回文
4、如果相等就把n减一,m加一,问题规模就减小了二,然后调用自己实现递归
编程总结:
递归的步骤:
每个递归函数的开头一定是判断递归结束条件是否满足的语句(一般是if语句);
函数体一定至少有一句是“自己调用自己”的。
每个递归函数一定有一个控制递归可以终结的变量(通常是作为函数的参数而存在)。每次自己调用自己时,此变量会变化(一般是变小),并传送给被调用的函数。
递归特点:
先从大到小,再从小到大;
每个步骤要干的事情都是类似的,只不过其规模“小一号”;
必须要保持递归调用的过程可以终结。