C ++中的递归与迭代阶乘
recursive vs iterative factorial in C++
我编写了一个糟糕的 c++ 程序来计算输入值的阶乘,其中我编写了两个函数来独立进行实际计算(一个迭代,另一个递归)。对我来说没有任何意义的是,为什么迭代阶乘在 n = 13 附近崩溃但递归一直到 unsigned long long int 的上边界?
P.S。如果能收到有关我的代码质量的任何建议,我将不胜感激,并将很乐意对其进行修改,谢谢。
#include <iostream>
using namespace std;
unsigned long long int rekursiv_fak (int); // function prototyping
unsigned long long int iterativ_fak (int);
int main () {
unsigned int n; // factorial is defined only for positive integers !!
cout << "Enter a positive integer value: ";
cin >> n;
cout << "The factorial of " << n << " is equal to: " << iterativ_fak(n) << " or alternatively " << rekursiv_fak(n) << endl;
return 0;
}
unsigned long long int rekursiv_fak (int n) {
if (n == 1)
return 1;
return n * rekursiv_fak(n - 1);
}
unsigned long long int iterativ_fak (int n) {
for (int i{n - 1}; i > 0; --i)
n *= i;
return n;
}
在iterativ_fak()
中,你乘以int类型的变量n。是32位类型,只能存储12个!在最大值rekursiv_fak()
另一方面 returns unsigned long long 类型变量因此有 64 位来存储 n * rekursiv_fak(n - 1)
.
的结果
我编写了一个糟糕的 c++ 程序来计算输入值的阶乘,其中我编写了两个函数来独立进行实际计算(一个迭代,另一个递归)。对我来说没有任何意义的是,为什么迭代阶乘在 n = 13 附近崩溃但递归一直到 unsigned long long int 的上边界?
P.S。如果能收到有关我的代码质量的任何建议,我将不胜感激,并将很乐意对其进行修改,谢谢。
#include <iostream>
using namespace std;
unsigned long long int rekursiv_fak (int); // function prototyping
unsigned long long int iterativ_fak (int);
int main () {
unsigned int n; // factorial is defined only for positive integers !!
cout << "Enter a positive integer value: ";
cin >> n;
cout << "The factorial of " << n << " is equal to: " << iterativ_fak(n) << " or alternatively " << rekursiv_fak(n) << endl;
return 0;
}
unsigned long long int rekursiv_fak (int n) {
if (n == 1)
return 1;
return n * rekursiv_fak(n - 1);
}
unsigned long long int iterativ_fak (int n) {
for (int i{n - 1}; i > 0; --i)
n *= i;
return n;
}
在iterativ_fak()
中,你乘以int类型的变量n。是32位类型,只能存储12个!在最大值rekursiv_fak()
另一方面 returns unsigned long long 类型变量因此有 64 位来存储 n * rekursiv_fak(n - 1)
.