递归问题
2015-09-20 15:05
176 查看
递归的定义:把一个问题分为几个小问题,然后用同样的方法解决,这就是递归方法。
数学中很多问题是递归的,例如阶乘问题,可以用小整数的阶乘来计算大整数的阶乘;幂次值问题,可用小实数的乘幂值计算大实数的幂次值。下面以阶乘问题来介绍递归,求n!;
long Fact(long n)
{
if(n == 0 || n == 1)
return 1;
return (n*Fact(n-1));
}
一个函数自己调用自己,称为直接递归,一个函数在调用其他函数的过程中调用自己,称为间接递归。
为了理解递归函数的执行过程,引入“层次递归”的概念:从第一次调用递归函数开始,调用函数依次称为第0层递归、第1层递归、第2层递归。。。。
递归调用的关键是每个层次递归在栈中都有自己的局部变量拷贝,因此不同层次的递归是不同的函数。所以我们可以称第n-1层递归和第n层递归是主调函数和被调函数的关系。递归函数通过递归参数来避免死循环,它在每次递归调用时取值是不同的,且它的取之变化可保证在有限次递归后结束。
以阶乘为例:
long c = Fact(3);//第0层递归
long Fact (3)
{
if(3 == 0 || 3 == 1)
return 1;
return (3*Fact(2)); //第1层递归
}
long Fact (2)
{
if(2 == 0 || 2 == 1)
return 1;
return (2*Fact(1)); //第2层递归
}
long Fact (1)
{
if(1 == 0 || 1== 1)
return 1; // 第3层递归
return (1*Fact(1));
}
到第3层递归调用后,递归停止。
所谓递归:从上到下表示“递”(递推)----将复杂问题转换为同类简单问题。
从下到上表示“归”(回归)----从递归停止处依次一层层向前返回处理结果。
数学中很多问题是递归的,例如阶乘问题,可以用小整数的阶乘来计算大整数的阶乘;幂次值问题,可用小实数的乘幂值计算大实数的幂次值。下面以阶乘问题来介绍递归,求n!;
long Fact(long n)
{
if(n == 0 || n == 1)
return 1;
return (n*Fact(n-1));
}
一个函数自己调用自己,称为直接递归,一个函数在调用其他函数的过程中调用自己,称为间接递归。
为了理解递归函数的执行过程,引入“层次递归”的概念:从第一次调用递归函数开始,调用函数依次称为第0层递归、第1层递归、第2层递归。。。。
递归调用的关键是每个层次递归在栈中都有自己的局部变量拷贝,因此不同层次的递归是不同的函数。所以我们可以称第n-1层递归和第n层递归是主调函数和被调函数的关系。递归函数通过递归参数来避免死循环,它在每次递归调用时取值是不同的,且它的取之变化可保证在有限次递归后结束。
以阶乘为例:
long c = Fact(3);//第0层递归
long Fact (3)
{
if(3 == 0 || 3 == 1)
return 1;
return (3*Fact(2)); //第1层递归
}
long Fact (2)
{
if(2 == 0 || 2 == 1)
return 1;
return (2*Fact(1)); //第2层递归
}
long Fact (1)
{
if(1 == 0 || 1== 1)
return 1; // 第3层递归
return (1*Fact(1));
}
到第3层递归调用后,递归停止。
所谓递归:从上到下表示“递”(递推)----将复杂问题转换为同类简单问题。
从下到上表示“归”(回归)----从递归停止处依次一层层向前返回处理结果。
相关文章推荐
- 计算器
- Hello Pomleo浅析之 game-server
- 研磨数据结构与算法-08希尔排序
- Universal-Image-Loader的使用
- 十大建议,助你运营
- 23设计模式之建造者模式(Builder)
- DLL注入
- PopupWindow的使用
- 基于内容的推荐算法CB
- 安装Android Studio遇到的问题及解决方案
- 如何在VPC中安装Ubuntu
- hdu 5465 Clarke and puzzle
- 编程的子阵列和最大和膨胀的美(可连接的端到端)
- eclipse 快捷键大全
- WebView(网络视图)
- exception is org.hibernate.exception.DataException: Could not execute JDBC batch update at
- 《第一行代码Android》笔记
- JDK,JRE区别
- Linux中的程序和进程,PID和PPID
- Android三种播放视频的方式