您的位置:首页 > 其它

递归问题

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层递归调用后,递归停止。

所谓递归:从上到下表示“递”(递推)----将复杂问题转换为同类简单问题。

从下到上表示“归”(回归)----从递归停止处依次一层层向前返回处理结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: