软讯网络 > 编程语言 > C/C++ > 递归转非递归求N的阶乘
【标 题】:递归转非递归求N的阶乘
【关键字】:
【来 源】:http://www.cublog.cn/u/19701/showart.php?id=134791
递归转非递归求N的阶乘
1.
//递归求N阶乘
pvivate int factorial(int n)
{
if ( n > 1 )
{
return n * factorial ( n - 1 );
}
else if ( n == 1 )
{
return 1;
}
else
{
throw new ArgumentException ( "Argument Error!");
}
}
2.
非递归方法一:循环法,前提是,待解决问题必须能够分解出可循环规律方可
而n! = n! = n*(n-1)*(n-2)*....*1;从循环的角度理解就是:n!表示执行n次循环计算一个增量k,初始k=1和结果t=1;每次t乘以k++的值.从而可以得到:
private int factorialByLoop( int n )
{
int t = 1;
int k = 1;
while ( k <= n )
{
t = t * k;
k ++;
}
return t;
}
3.
非递归方法二:自定义堆栈法,目的是为不能分析出来循环的递归操作提供开销可控的方法.如:
private int FactorialByStack(int n)
{
Stack<int> s = new Stack<int>();
int t = 1;
int temp;
s.Push(n);
while ((temp = s.Peek()) != 1)
{
t *= s.Peek();
s.Pop();
s.Push(temp - 1);
}
return t;
}
前两种方法懂,最后一种方法不懂.
【相关文章】
没有相关文章