递归---算法

来源:互联网 发布:在线数字抽奖软件 编辑:程序博客网 时间:2024/06/14 16:24

递归的基本思想

什么是递归
递归 某个函数直接或间接的调用自身

问题的求解过程划分成许多相同性质子问题的求解而小问题的求解过程可以很容易的求出

这些子问题的解就构成里原问题的解


总体思想
待求解问题的解输入变量x的函数f(x)
通过寻找函数g( ),使得f(x) = g(f(x-1))
已知f(0)的值,就可以通过f(0)g( )求出f(x)的值

推广
扩展到多个输入变量x,y,z,x-1也可以推广到x-x1,只要递归朝着出口的方向即可 


递归与枚举的区别

枚举:

把一个问题划分成一组子问题, 依次对这些子问题求解

子问题之间是横向的,同类的关系

递归:
把一个问题逐级分解成子问题
子问题与原问题之间是纵向的,同类的关系

语法形式上:在一个函数的运行过程中,调用这个函数自己

直接调用:fun()中直接执行fun()
间接调用:fun1()中执行fun2();fun2()中又执行fun1()



递归的三个要点

递归式:
如何将原问题划分成子问题
递归出口:
递归终止的条件, 即最小子问题的求解,可以允许多个出口

界函数:
问题规模变化的函数, 它保证递归的规模向出口条件靠拢




递归解决问题的关键

1) 找出递推公式
2) 找到递归终止条件

注意事项

由于函数的局部变量是存在栈上的,如果有体积大的局部变量,比如数组,而递归层次可能很深的情况下,也许会导致栈溢出可以考虑使用全局数组或动态分配数组




int Factorial(intn)

{

    if (n == 0)

return1;

    else

returnn *Factorial(n- 1);










原创粉丝点击