递归的思想就是:把问题分解成为规模更小的、具有与原问题有着相同解法的问题。
递归使用的条件:
- 可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。
- 存在一种简单情境,可以使递归在简单情境下退出。
在编写递归调用的函数的时候,一定要把对简单情境的判断写在最前面,以保证函数调用在检查到简单情境的时候能够及时地中止递归,否则,你的函数可能会永不停息的在那里递归调用了。
简单的自己调用自己
int jiecheng(n)
{
if(n==1)
return 1;
else
return n * jiecheng(n-1);//后者返回的是一个函数值相当于f(n-1)
}
以上相当于 f(n)=n*f(n-1) \原先的规模为n 通过分解令规模为1 此时方便求解 再令规模为2 直至 n
f(n-1)=(n-1) * f(n-2)
直到 f(2)= 2 * f(1) 其中f(1)已知 故可推回f(2 ) f(3) 知道f(n)
字符串回文递归判断
如何减小规模:我们发现 回文字符串 去掉两端依旧回文
方法 :先判断给定字符串的首尾字符是否相等,若相等,则判断去掉首尾字符后的字符串是否为回文,若不相等,则该字符串不是回文。
不断减小规模 由n个字符 减少到1或两个字符
return
((str[0] == str[n-1]) ? is_palindereme(str+1, n-2) : 0);