递归与迭代因子在C++中的应用。

问题描述 投票:0回答: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;
}
c++ recursion iteration factorial
1个回答
5
投票

iterativ_fak() 你将类型为int的变量n相乘。它是32位的类型,最多只能存储12个!另一方面,返回unsigned long长类型的变量,因此有64位来存储结果。rekursiv_fak() 另一方面,返回unsigned long long类型的变量,因此有64位来存储结果的。n * rekursiv_fak(n - 1).

© www.soinside.com 2019 - 2024. All rights reserved.