尾递归
尾递归是函数调用的最后一步,没有需要回溯的状态,可以使用下面的方式改写成迭代:
阶乘
int factorial(int val) {
if(val == 0) {
return 1;
};
return val * factorial(val - 1);
}
使用循环代替递归,将递归参数设置为循环参数:
int factorial(int val) { int sum = 1; while(val > 0) { sum *= val; --val; } return sum; }
使用栈模拟递归,将递归参数设置为入栈参数:
int factorial(int val) { std::stack<int> stack; stack.push(val); int sum = 1; while(!stack.empty()) { int val = stack.top(); stack.pop(); sum *= val; if(val > 1) { stack.push(val - 1); } } return sum; }