递归
来源:互联网 发布:淘宝回收黄金可靠吗 编辑:程序博客网 时间: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
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- iOS中左右滑动切换,滑动标签页导航的设计思路
- Java之学习笔记(27)-------------final
- 取消Outlook脱机工作
- 如何合理地估算线程池大小
- 环境配置相关
- 递归
- 无线术语和无线数据指标
- Android 使用Canvas绘制饼图
- Java之学习笔记(28)-------------static
- 常用的网络驱动收包方式
- RobotFramework+Selenium2环境搭建与入门实例
- android实现首次启动引导
- redis常见操作命令-hash
- Java之学习笔记(29)-----------static