以递减顺序递归打印因子值?

时间:2014-12-05 00:06:52

标签: c++ recursion factorial

使用C ++来计算阶乘是很简单的。打印即将出现的值(如果阶乘为5)... 1 * 2,* 3,* 4 * 5也没问题 - 我想我已经在下面做了。 但是我很难做的就是告诉我5 * 4然后值* 3然后值* 2等我希望能够打印下来的数据,我似乎无法弄明白。

#include <iostream>
using namespace std;   

int factorial(int n);

int main()
{
   int number;

   cout << "Enter an integer value ";
   cin >> number;

   cout << "The factorial of " << number << " is ";
   cout << factorial(number) << endl;
}

int factorial(int n)
{
   if (n == 0)
      return 1;                    // Base case
   else
   {
      n = n * factorial(n - 1); // Recursive case
      cout << " going up" << n << " ";
      return n;
   }
}

还有其他一些帖子,但我没有找到一个问同样的事情。 期望的结果是:20 60 120 目前的结果是1 2 6 24 120 请指教。 谢谢。

1 个答案:

答案 0 :(得分:2)

只需更改打印值的位置

else
   {
      n = n * factorial(n - 1); // Recursive case
      cout << " going up" << n << " ";
      return n;
   }

else
   {
      cout << " going down" << n << " ";    
      n = n * factorial(n - 1); // Recursive case
      return n;
   }

上面会打印5 4 3 2 1但是如果你想要像

那样的话
5 20 60 ...

比你必须稍微更改递归定义。

#include<iostream>

using namespace std;
int factorial(int n,int temp);
int main()
{
   int number;

   cout << "Enter an integer value ";
   cin >> number;

   cout << "The factorial of " << number << " is ";
   cout << factorial(number,1) << endl;
}

int factorial(int n,int temp)
{
   if (n == 0)
      return temp;                    // Base case
   else
   {   
      cout << " going down" << n * temp << " ";
      factorial(n - 1,n*temp); // Recursive case
      //return n;
   }   
}