C++ 程序 使用递归查找大数的阶乘

C++ 程序 使用递归查找大数的阶乘

给定一个大数 N ,任务是使用递归查找 N 的阶乘。

非负整数的阶乘是所有小于或等于n的整数的乘积。例如6的阶乘为65432*1,即720。

例子:

输入: N = 100

输出: 933262154439441526816992388562667004-907159682643816214685929638952175999-932299156089414639761565182862536979-208272237582511852109168640000000000-00000000000000

输入: N = 50

输出: 3041409320171337804361260816606476884-4377641568960512000000000000

迭代方法: 迭代方法在本文第一部分进行了讨论。这里,我们讨论递归方法。

递归方法: 为了递归地解决这个问题,算法在调用相同的函数递归地乘以数字n的结果时改变了方式。 请按照以下步骤解决该问题:

  • 如果 n 小于等于 2 ,则将 n 乘以 1 并将结果存储在向量中。
  • 否则, 调用函数 multiply(n, factorialRecursiveAlgorithm(n – 1)) 查找答案。

下面是以上方法的实现。

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
  
// MUltiply the number x with the number
// represented by res array
vector<int> multiply(long int n, vector<int> digits)
{
  
    // Initialize carry
    long int carry = 0;
  
    // One by one multiply n with
    // individual digits of res[]
    for (long int i = 0; i < digits.size(); i++) {
        long int result 
          = digits[i] * n + carry;
  
        // Store last digit of 'prod' in res[]
        digits[i] = result % 10;
  
        // Put rest in carry
        carry = result / 10;
    }
  
    // Put carry in res and increase result size
    while (carry) {
        digits.push_back(carry % 10);
        carry = carry / 10;
    }
  
    return digits;
}
  
// Function to recursively calculate the
// factorial of a large number
vector<int> factorialRecursiveAlgorithm(
  long int n)
{
    if (n <= 2) {
        return multiply(n, { 1 });
    }
  
    return multiply(
      n, factorialRecursiveAlgorithm(n - 1));
}
  
// Driver Code
int main()
{
    long int n = 50;
  
    vector<int> result 
      =factorialRecursiveAlgorithm(n);
  
    for (long int i = result.size() - 1; i >= 0; i--) {
        cout << result[i];
    }
  
    cout << "\n";
  
    return 0;
}  

输出

30414093201713378043612608166064768844377641568960512000000000000

时间复杂度: O(n)

辅助空间: O(K),其中K是 输出 中包含的最大数字数量。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例