迭代、递归替代循环
时间:2010-12-16 来源:woxf
书中对递归过程是这么描述的:递归过程,论述的是一个语法形式上的事实,说明这个过程的定义中(直接或间接地)引用了该过程本身。而我们说某一计算过程具有某种模式时(比如说线性递归),我们说的是这一计算过程的进展方式,而不是相应过程书写上的语法形式。所以我们可以说某个递归过程将产生一个迭代的计算过程时,可能不好理解,但是这一计算过程确实是迭代的,如下述求两个例子的迭代法,他们其实是递归过程,但是其计算过程确实是迭代的。
一、不用循环,计算x+(x+1)+(x+2)+(x+3)+...+y
递归法:
代码
/// <summary>
/// 利用递归求和
/// </summary>
/// <param name="x">起始值</param>
/// <param name="y">截止值</param>
/// <returns>终值</returns>
static int SumDigui(int x,int y)
{
if (x > y)
return 0;
else
{
return y + SumDigui(x, y - 1);
}
}
迭代法(递归过程,但是采用的是迭代的计算过程):
代码
/// <summary>
/// 迭代求和
/// </summary>
/// <param name="x">起始值</param>
/// <param name="y">截止值</param>
/// <returns>和</returns>
static int SumDiedai(int x, int y)
{
return diedaiSum(x, x + 1, y);
}
/// <summary>
/// 迭代求和
/// </summary>
/// <param name="product">结果=product+next</param>
/// <param name="next"></param>
/// <param name="maxcount"></param>
/// <returns></returns>
static int diedaiSum(int product, int next, int maxcount)
{
if (next > maxcount)
{
return product;
}
else
{
return diedaiSum(product + next, next + 1, maxcount);
}
}
二、不用循环,计算n的阶乘
递归法:
代码//递归求阶乘
static int Jidigui(int n)
{
if (n == 1)
return 1;
else
{
return n * Jidigui(n - 1);
}
}
迭代法(递归过程,但是采用的是迭代的计算过程):
代码//迭代求阶乘
static int Jidiedai(int n)
{
return factiter(1, 1, n);
}
/// <summary>
/// 迭代计算
/// </summary>
/// <param name="product">结果=procduct*couter,初始值为1</param>
/// <param name="couter">计数器counter初始值为1</param>
/// <param name="maxcount">n</param>,
/// <returns></returns>
static int factiter(int product, int couter, int maxcount)
{
if (couter > maxcount)
return product;
else
{
return factiter(product * couter, couter + 1, maxcount);
}
}
相关阅读 更多 +