递归的定义
若一个对象部分地包含它自己, 或用它自己给自 己定义, 则称这个对象是递归的;若一个过程直接地 或间接地调用自己, 则称这个过程是递归的过程。
递归的定义
直接递归 fun_a() {… fun_a() … }
间接递归 fun_a() {… fun_b() …}
fun_b() {… fun_a() …}
c1, c2,……,cm是若干个可以直接(用非递归方法)解决的问题, g是一个非递归函数,反映了递归问题的结构。
递归模型
例如,阶乘函数 递归出口
1,
当n0时
n! n(n1)!, 当n1时
递归体
ห้องสมุดไป่ตู้
递归的执行过程
实际上,递归是把一个不能或不好直接求解的 “大问题”转化为一个或几个“小问题”来解决,再 把这些“小问题”进一步分解成更小的“小问题”来 解决,如此分解,直至每一个“小问题”都可以直接 解决(此时分解到递归出口)。
递归调用执行过程:
... ...
main() x=17
bn=bSearch(a,x,0,7)
...
bn=bSearch(a,x,0,7)
mid=3 bn=bSearch(a,x,4,7)
...
4
...
return(bn=bSearch(a,x,4,7))
mid=5
bn=bSearch(a,x,4,4)
6.1 递归的概念
若一个算法直接地或间接地调用自己本身,则称 这个算法是递归算法。
1.问题的定义是递归的
例如:阶乘函数的定义
1
当n=0时
n=
n*(n-1) 当n>0时
2. 问题的解法存在自调用 例如:折半查找算法