尾递归

尾递归是函数调用的最后一步,没有需要回溯的状态,可以使用下面的方式改写成迭代:

阶乘
int factorial(int val) {
    if(val == 0) {
        return 1;
    };

    return val * factorial(val - 1);
}
  1. 使用循环代替递归,将递归参数设置为循环参数:

    int factorial(int val) {
        int sum = 1;
        while(val > 0) {
            sum *= val;
            --val;
        }
    
        return sum;
    }
  2. 使用栈模拟递归,将递归参数设置为入栈参数:

    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;
    }
Last moify: 2025-04-07 07:03:40
Build time:2025-07-18 09:41:42
Powered By asphinx