gpt4 book ai didi

c++ - 递归中的默认返回值

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:16 25 4
gpt4 key购买 nike

考虑以下众所周知的代码来查找数字的阶乘。

int fact(int num)
{
if (num != 1)
return num * fact(num - 1);
else
return num;
}

现在考虑另一个相同的变体

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

第一个看起来很干净,如果我们将 num 设为 4,它将是 4*3*2*1。第二个也工作正常,即使编译器可能会发出警告。但是在后者中,如果num变为1,则没有return语句。那么如何计算呢?如果 num 为 1,代码仅在返回 1 时才有效。任何人都可以解释一下 4*3*2*x 发生了什么。 x 如何返回为 1。谢谢。

编辑:我使用的是 gcc 4.8.2

最佳答案

第二个变体是不正确的,没有“默认返回值”这样的东西,这种行为是完全未定义的!

想想看,编译器怎么知道fact(1) == 1??

如果你让我猜,我会说你想避免使用 else 东西,在那种情况下,默认返回值应该是最后一句话。

int fact(int num)
{ // pre: num > 0
if (num != 1)
return num * fact(num - 1);
return num;
}

关于c++ - 递归中的默认返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24900898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com