递归

来源:互联网 发布:淘宝回收黄金可靠吗 编辑:程序博客网 时间:2024/06/05 10:31

一.如果一个递归过程或递归函数中的递归调用语句是最后一条执行语句,责成这种递归为尾递归

例如,设计一个求n!

int fun(int n){      if(n == 1)           return 1;      else           return (fun(n-1)*n)}

二.一般来说,能用递归一般应该满足一下三个条件

1.需要解决的问题可以转化为一个或多个子问题来解决

2.递归调用的次数是有限的

3.有结束递归调用的条件来终止递归

三.何时使用递归

1.定义是递归的

例如,求n!和Fibonacci数列等,对于这些问题的求解,可以将其递归定义转化为对应的递归算法。例如,求Fibonacci数列的递归算法如下:

int Fib(int n)

{

if(n==1||n==2)

return 1;

else

return (Fib(n-1)+Fib(n-2));

}
2.数据结构是递归的

有些数据结构是递归的,例如二叉树就是一种递归数据结构,线性表的单链表存储结构也是一种递归存储结构。例如,单链表中结点类型的定义如下:

struct Node

{

int data;

Node *next;

};

3.问题的求解方法是递归的

例如,典型的问题有Hanoi问题的求解

四.递归模型

递归模型是递归算法的抽象,它反映一个递归问题的递归结构。例如:

f(n) = 1 当n=1时

f(n)=n*f(n-1) 当n>1时

第一个式子给出了递归的终止条件,第二个式子给出了f(n)的值与f(n-1)的值之间的关系,把第一个式子称为递归出口,把第二个式子称为递归体


0 0
原创粉丝点击