尾递归与递归

问题描述 投票:0回答:1

我有两个函数,一个是“正常”递归,另一个使用尾调用,因此它是尾递归: “正常”递归:

 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 的调用堆栈,但我看不到任何区别!
我是不是误会了什么?
我如何可视化这两个函数之间的差异?

c++ recursion visual-studio-2015
1个回答
0
投票

在尾递归中,函数返回后不进行任何计算。理论上是可以优化的。

顺便问一下,factorial_n 函数在做什么?

我没有足够的声誉来发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.