C# 我是否应该将递归步骤包装为一个“;否则;?

C# 我是否应该将递归步骤包装为一个“;否则;?,c#,coding-style,recursion,C#,Coding Style,Recursion,可能重复: 考虑一个典型的递归函数: public int Fact(n) { if (n < 2) { return 1; } else { return n * Fact(n-1); } } public int事实(n) { if(n

可能重复:

考虑一个典型的递归函数:

public int Fact(n) 
{
    if (n < 2)
    {
        return 1;
    }
    else
    {
        return n * Fact(n-1);
    }
}
public int事实(n)
{
if(n<2)
{
返回1;
}
其他的
{
返回n*事实(n-1);
}
}
这样写和这样写有什么区别

public int Fact(n) 
{
    if (n < 2)
    {
        return 1;
    }

    return n * Fact(n-1);
}
public int事实(n)
{
if(n<2)
{
返回1;
}
返回n*事实(n-1);
}
我更喜欢后者,特别是当递归步骤由许多行代码组成时。我不想添加不必要的缩进


这有实际的区别吗?还是这只是一种风格偏好?

这只是风格的问题。通常,当then块的末尾返回时,我不使用else块。

没有区别。事实上,在递归函数调用中,您将返回一个特定的值,或者返回相同函数调用的返回值。

不,没有区别。如果“If语句”为true,它将转到第一个return语句。如果不正确,则程序将转到第二个返回语句。

函数完全等效。这是个人偏好的问题,但是一些IDE可能会抱怨第一个版本,因为显然,
else
是不必要的。但有些人可能会说,第一个版本更容易阅读。

它们之间没有实际区别。这取决于你所处的环境和环境。

编辑:这个答案似乎产生了一些困惑。我先写了它,然后删除了它,但后来我仍然收到了关于它内容的消息和询问。所以这里它又上线了

问题是,这个问题被编辑了很多次,从根本上改变了它的含义:当我第一次回答它时,它被标记为python,并且包含python代码。当我获得第一次投票时,问题被标记为C++,人们开始评论“编译器优化选项”

所以:这里又是原来的答案,但请记住它指的是python


这有实际的区别吗?或者这只是一种风格偏好

与普遍的看法相反,还有一个实际的区别:性能!差异在应用程序中是否有任何意义取决于。。。但是如果您的代码被递归调用或在循环中调用:

>>> T(lambda : fact1(1)).repeat(number=10000000)
[2.5754408836364746, 2.5710129737854004, 2.5678811073303223]
>>> T(lambda : fact2(1)).repeat(number=10000000)
[2.8432059288024902, 2.834425926208496, 2.8364310264587402]
其中,
fact1
定义为带else功能,而
fact2
定义为不带


所有代码标签的用途是什么?(我认为除了可读性没有其他区别。)@JaredFarrish您认为哪一种更可读?我认为第二种形式可能比第一种更容易打字错误(因此,第一种形式在视觉上更具表现力)。除此之外,我没有其他偏好。我不喜欢在PHP这样的语言中省略大括号。从技术上讲,您可以执行
return(n<2?1:n*fact(n-1))
,但这会对可读性产生更大的影响。“但这都是一句话。@Pessimoppotamus-说真的,你应该在发帖之前把你的问题想清楚。”。你首先问了很多语言,然后给它加上了
python
的标签,然后是
c#
,最后你追着我要求澄清我在一个完全不相关的问题中删除的答案。。。我知道你没有恶意,你是真诚的,但对我来说,这只是浪费我的时间(它们之间没有这样的区别。如果你要包括
else
,第二个返回语句将被执行,如果指定的条件为false(这是真的),如果你要排除
else
。这是令人惊讶的。为什么没有else的返回语句会更慢?@pessimopotamus我不是这方面的专家。我猜(如果我错了,我很乐意被纠正)区别在于它们被编译成字节码的方式:
else
允许解释器在
if
子句上自动删减该代码分支,而在提前返回的情况下,删减该部分是一个需要一些开销的操作。我要重复:我的只是一个猜测,我可能错了!)我认为这仅仅取决于编译器的优化选项以及它的实现方式,而不是一件普通的事情curious@footy:)我指的是实际的编程环境和正在发生的情况。。。。现在有意义了:)