【发布时间】:2015-01-28 11:54:20
【问题描述】:
我以这种方式递归地实现了阶乘:
int factorial(int x){
if (x <= 0)
return 1;
else
return (x*factorial(x - 1));
}
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "Please enter your number :::";
int x;
std::cin >> x;
std::cout<<"factorial(" << x << ") = "<< factorial(x);
getchar(); getchar();
}
哪种实现此类代码的方式更有用,是使用迭代和循环编写它还是像上面那样递归编写它?
【问题讨论】:
-
这完全取决于你对“有用”的定义。
-
计算阶乘几乎没有用处。
-
一般来说,如果你可以不使用递归并使用迭代算法,你应该这样做。没有这么简单的东西,但调试递归算法可能会很痛苦。有趣的问题是内存会发生什么,尤其是堆栈,例如,想想如果你用参数 30 调用你的函数会发生什么。PS 不要太大,阶乘很快就会超过 maxint。
-
因为适合 int 的阶乘范围很小。我会简单地使用所有预先计算的值的数组。
-
有什么用?这两种方法对于教授初学者递归和迭代编程都很有用。
标签: c++ algorithm recursion iteration