递归
2016-01-18 09:59
204 查看
一.如果一个递归过程或递归函数中的递归调用语句是最后一条执行语句,责成这种递归为尾递归
例如,设计一个求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)的值之间的关系,把第一个式子称为递归出口,把第二个式子称为递归体
例如,设计一个求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)的值之间的关系,把第一个式子称为递归出口,把第二个式子称为递归体
相关文章推荐
- 特征生成
- property
- Android开发之禁止下拉通知栏的方法
- Flex之URLLoader加载XML
- Java学习笔记(47)-----------泛型详解
- Java学习笔记(46)------------知识学习宝库!
- 2.7volatile关键字
- Android M 新的运行时权限开发者需要知道的一切
- Java学习笔记(45)------------Hashcode的作用
- 使用MapReduce实现简单的倒排索引
- Java学习笔记(44)----------探索equals()和hashCode()方法
- linux下使用mysql数据库的总结
- uva 10055
- CSS3弹性盒模型,Flex布局教程
- 用户空间与内核空间数据交换的方式------seq_file
- flex HTTPService浅析
- UIImageView添加阴影和边框
- 提高android数据库性能,GreenDao初步使用
- 食堂买饭的启示
- centos彻底删除mysql