c++ 尾递归与递归

aemubtdh  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(90)

我有两个函数,一个是“正常”递归,另一个是尾部递归:
“正常”递归:

int factorial(int num)
    {
        if (num == 1)
            return num;
        return num*factorial(num - 1);
    }

字符串
尾部递归:

int factorial_n(int num,int acc=1)
{
    if (num == 1)
        return acc;
    return factorial_n(num - 1,acc);
}
int call(int num)
{
    return factorial_n(num, 1);
}


我尝试可视化使用尾部递归时堆栈中的差异,
在调试模式下使用visual studio的调用堆栈,但我看不出有什么不同!
我是不是误会什么了?
我怎样才能直观地看到这两个函数之间的区别?

tpgth1q7

tpgth1q71#

在尾递归中,函数返回后没有计算,理论上它可以被优化。
那么factorial_n函数是做什么的呢?

相关问题