程序源代碼:
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語句);
函數體一定至少有一句是“自己調用自己”的。
每個遞歸函數一定有一個控制遞歸可以終結的變量(通常是作為函數的參數而存在)。每次自己調用自己時,此變量會變化(一般是變小),並傳送給被調用的函數。
遞歸特點:
先從大到小,再從小到大;
每個步驟要干的事情都是類似的,只不過其規模“小一號”;
必須要保持遞歸調用的過程可以終結。