常用递归方法的三种情况:1)递归定义的数学函数;2)具有递归特性的数学结构;3)可递归求解的问题。
递归问题——用分治法求解
所谓分治法,即对于一个比较复杂的问题,能够将其分解成几个相对简单的且解法相同或类似的子问题进行求解,因此,具有三个必备条件:
- 能将一个问题转换成一个新问题,同时,新问题与原问题的解法相同或者类似,仅处理的对象不同,且这些处理对象是变化有规律的;
- 可通过第一步的处理使问题简化;
- 必须拥有一个明确的递归出口,或称递归的边界。
分治法求解递归问题算法的一般形式为:
void p(输入参数)
{
if(递归结束条件)
可直接求解步骤; //基本项
else
p(); //归纳项
}
举例如下:
long Fact(long n)
{
if(n==0)
return 1; //基本项
else
return n*Fact(n-1); //归纳项
}