迭代或递归阶乘
Iterative or Recursive Factorial
我以这种方式递归地实现了阶乘:
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();
}
使用迭代和循环编写或递归编写(如上面)哪种实现此类代码的方法更有用?
这取决于数字本身。
对于正常范围数字,可以使用递归解。由于它利用以前的值来计算未来的值,因此它可以动态提供"阶乘(n-1)"的值。
factorial(n) = factorial(n-1) * n
但是,由于递归使用堆栈,因此如果您的计算比堆栈大小更深,它最终会溢出。此外,递归解决方案的性能会很差,因为在每个递归调用的病态级别中,寄存器的大量推送弹出。
在这种情况下,迭代方法是安全的。
看看这个比较。
希望对您有所帮助!
在C++中,递归实现通常比迭代实现更昂贵。原因是每次调用都会导致创建一个新的堆栈帧,该堆栈帧保存需要保存的返回地址、局部变量和寄存器等数据。因此,递归实现需要与嵌套调用深度成线性关系的内存量,而迭代实现使用恒定量的内存。在您的特定情况下(即尾递归),编译器优化可能会通过直接跳转切换函数调用,防止调用堆栈上不必要的内存使用。有关更详细的说明,您可能需要阅读:递归比循环快吗?
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 返回阶乘C++的递归函数
- 递归 C++ 阶乘为多个条目提供负值
- 递归阶乘函数在"22!"上产生不正确的结果
- 在C++中跟踪递归阶乘函数
- 迭代或递归阶乘
- 带有值的递归阶乘错误返回语句,在函数中返回 'void' [-fallowive]
- C++如何递归打印阶乘程序的输出
- 记忆化的递归阶乘函数
- 下面使用Map和Vector实现递归级阶遍历的时间复杂度是多少
- 为什么阶乘递归函数比普通阶乘函数效率低
- 使用迭代和递归计算阶乘时的不同答案
- 这个在c++中查找阶乘的递归程序背后的逻辑是什么?
- 二阶线性递归方程的矩阵表示