gpt4 book ai didi

c++ - 使用变量与使用数字

转载 作者:行者123 更新时间:2023-12-03 06:57:14 24 4
gpt4 key购买 nike

想象一下这些版本中的函数:

int faculty(const unsigned int n) {
return n == 1 ? n : n * faculty(n - 1);
}
int faculty(const unsigned int n) {
return n == 1 ? 1 : n * faculty(n - 1);
}

唯一的区别是,我在第一个中返回 n,在第二个中返回 1,具体取决于 n。结果是相同的,但是在忽略重要性的同时您是否可以意识到任何其他差异?

我知道编译器很有可能会从中生成相同的汇编指令,但是嘿,我只是好奇。

最佳答案

正如评论中所指出的,gcc will recognise the two to be identical 。对于 clang 对代码的作用,有一个 follow-up question 。除了 clang 造成严重破坏之外,区别只是表面上的。


但是您的代码中存在一个微妙的问题。 factorial(0) 将使 n-1 环绕并递归,直到到达 n==1 只是返回错误的值:0 来自顶级 n==0 调用中的 0 * coach(-1U)。 (0! 被定义为 1)。

这是一个过于冗长的正确版本:

int faculty(const unsigned int n) {
const unsigned int stop_when_n_leq = 1;
const int return_at_stop = 1;
return n <= stop_when_n_leq ? return_at_stop : n * faculty(n - 1);
}

关于c++ - 使用变量与使用数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60773397/

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