之前上《数据结构》的网络课程学习了递归转非递归的机械式转换的方法,然后自己跟着步骤,将N的阶乘转化为非递归:
若N等于1,F(N) = 1; 若N大于1,F(N) = F(N-1)*N; 机械式转化为非递归的代码(模拟栈):
#include <iostream>
#include <stack>
using namespace std;
// (1). 设置工作栈中元素的结构体
struct Datatype
{
int n; // 当前输入数据n
long fn; // Factorial(n)的返回值
long fn_1; // 局部变量Factorial(n-1)
int retAddr; // 模仿返回地址,调用第i个递归函数的标示符为i(i=1,2,3,...,t);t+1为栈底标示符,也是结束符
};
long Factorial(int N)
{
// (3). 增加非递归入口
// 初始化
Datatype currArea, areaTemp; // 当前栈中的元素,和一个临时元素
currArea.n = N; // 当前元素的n值
currArea.fn = 0;
currArea.fn_1 =