我应该将递归步骤封装在“;否则”;

本文关键字:否则 封装 递归 我应该 | 更新日期: 2023-09-27 18:15:11

可能重复:
否则还是返回?

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

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

这样写和这样写有什么区别?:

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

我更喜欢后者,尤其是当递归步骤由许多行代码组成时。我不想添加不必要的缩进。

是否存在实际差异,或者这只是一种风格偏好?

我应该将递归步骤封装在“;否则”;

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

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

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

不,没有区别。如果"If语句"为true,它将转到第一个return语句。如果它不是真的,那么程序将转到第二个返回语句。

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

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

问题是,这个问题被编辑了多次,从根本上改变了它的含义:当我第一次回答它时,它被标记为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是不具有else的函数。

啊!