递归算法知识点总结

1.递归的概念
若一个对象部分的包含它自己或用它自己给自己定义,则称这个对象是递归的。若一个过程直接或间接地调用自己,则称这个过程是递归过程。
2.什么时候使用递归
1)问题的定义是递归的
如求n的阶乘等,问题的求解过程可以将其递归定义直接转换为对应的递归算法。
2)数据结构是递归的
如单链表等
3)问题的求解方法是递归的
如:是在有序数组中查找一个数据元素是否存在的折半查找算法
3.递归算法的特点
将问题分解成为形式上更加简单的子问题来进行求解。
4.递归的分类
(1)直接递归
A( )
{……
CALL A( )

}

(2)间接递归
A( )
{……
CALL B( )

}
B( )
{……
CALL A( )

}

5.递归模型
一个递归模型由递归边界和递归体两部分组成。
例如 f(n)=n*f(n-1) n>1 递归体
f(1)=1 递归边界

6.递归求解过程

自上而下将问题分解、求解,再自下而上引用、合并,求出最后的答案。是一种分而治之的算法设计方法。
7.递归算法执行过程
例如
int fact(int n)
{ int x,y;
if (n<0) return -1;
if(n==0) return 1;
else { x=n-1; y=fact(x); return n*y; }
}
void main()
{ int fn;
fn=fact(3);
}

递归算法知识点总结_第1张图片
函数调用与返回的过程
(1)函数调用
当在一个函数的运行期间调用另一个函数时,在运行该被调用函数之前, 需先完成三项任务:
1.将返回地址、所有实参等信息传递给被调用函数保存;
2.为被调用函数的局部变量分配存储区;
3.将控制转移到被调用函数的入口。
(2)函数返回
从被调用函数返回调用函数之前,应该完成下列三项任务:
1.保存被调函数的计算结果;
2.释放被调函数保存局部变量的数据区;
3.依照被调函数保存的返回地址将控制转移到调用函数。
执行过程总结:
1.递归算法的执行过程是不断自调用,直到到达递归出口才结束自调用过程
2.到达递归出口后,递归算法开始按最后调用的过程最先返回的次序返回
3.返回到最外层的调用语句时递归算法执行过程结束。
8.效率分析总结
优点:递归过程结构清晰;程序易读;正确性容易证明
缺点:时间效率低;空间开销大;算法不易优化
9.借助堆栈消除递归
堆栈的后进先出特点与递归函数特点符合。可以利用栈来将任何递归函数转换成非递归的形式。

你可能感兴趣的:(算法设计)