C++程序 查找一个数的阶乘
非负整数的阶乘是小于或等于n的所有整数的乘积。例如,6的阶乘是65432*1,即720。
递归解法:
阶乘可以使用以下递归公式来计算。
n! = n * (n-1)!
n! = 1,如果n = 0或n = 1
下面是计算阶乘的实现。
// C++程序查找
//给定数字的阶乘
#include <iostream>
using namespace std;
//函数查找
//给定数字的阶乘
unsigned int factorial(unsigned int n)
{
if (n == 0)
return 1;
return n * factorial(n - 1);
}
//驱动器代码
int main()
{
int num = 5;
cout << "5的阶乘是 " <<
num << " 是 " <<
factorial(num) << endl;
return 0;
}
//该代码由Shivi_Aggarwal提供```
输出:
5的阶乘是120
时间复杂度: O(n),其中n是字符串的长度。
辅助空间: O(n)
迭代解法:
由于递归可能对大数比较昂贵,因此阶乘也可以迭代计算。这里我们展示了使用for和while循环的迭代方法。
使用For循环
// C++程序用于计算
//数字的阶乘
#include <iostream>
using namespace std;
//函数查找
//给定数字的阶乘
unsigned int factorial(unsigned int n)
{
int res = 1, i;
for (i = 2; i <= n; i++)
res *= i;
return res;
}
//驱动器代码
int main()
{
int num = 5;
cout << "5的阶乘是 " <<
num << " 是 " <<
factorial(num) << endl;
return 0;
}
//该代码由Shivi_Aggarwal提供```
输出:
5的阶乘是120
时间复杂度: O(n)
辅助空间: O(1)
使用While循环
// C++程序用于计算
//数字的阶乘
#include <iostream>
using namespace std;
//函数查找
//使用while循环查找给定数字的阶乘
unsigned int factorial(unsigned int n)
{
if(n == 0)
return 1;
int i = n, fact = 1;
while (n / i != n)
{
fact = fact * i;
i--;
}
return fact;
}
//驱动器代码
int main()
{
int num = 5;
cout << "5的阶乘是 " <<
num << " 是 " <<
factorial(num) << endl;
return 0;
}
//该代码由Shivi_Aggarwal提供```
输出:
5的阶乘是120
时间复杂度: O(n)
辅助空间: O(1)
单行解法(使用三元操作符):
// C++计算给定数的阶乘程序
#include <iostream>
using namespace std;
int factorial(int n)
{
// 一行代码计算阶乘
return ((n == 1 || n == 0) ? 1 :
n * factorial(n - 1));
}
// 主函数
int main()
{
int num = 5;
cout << "Factorial of " <<
num << " is "<<
factorial(num);
return 0;
}
// 本代码由shivanisinghss2110提供```
输出:
Factorial of 5 is 120
时间复杂度 :O(n),用于递归。
空间复杂度 :O(n),用于递归调用堆栈。