fact.cpp

来自「数据结构与算法分析」· C++ 代码 · 共 44 行

CPP
44
字号
#include <iostream.h>
#include <stdlib.h>

#include "book.h"

long fact(int n) {       // Compute n!
  // To fit n! in a long variable, require n <= 12
  Assert((n >= 0) && (n <= 12), "Input out of range");
  if (n <= 1)  return 1; // Base case: return base solution
  return n * fact(n-1);  // Recursive call for n > 1
}

#include "astack.h"

long fact(int n, Stack<int>& S) { // Compute n!
  // To fit n! in a long variable, require n <= 12
  Assert((n >= 0) && (n <= 12), "Input out of range");
  while (n > 1) S.push(n--);  // Load up the stack
  long result = 1;            // Holds final result
  int val;                    // Holds current value
  while(S.pop(val)) result = result * val; // Compute
  return result;
}

int main(int argc, char** argv)
{
  int n;

  Assert(argc == 2, "Usage: fact <n>");

  n = atoi(argv[1]);

  cout << "First, do the recursive version.\n";
  long val = fact(n);
  cout << "The factorial of " << n << " is " << val << endl;

  cout << "\nNow, do the stack-based version.\n";
  AStack<int> fs(n-1);  // Make stack just big enough
  long val2 = fact(n, fs);
  cout << "The factorial of " << n << " is " << val2 << endl;

  return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?