我应该将递归步骤封装在“;否则”;
本文关键字:否则 封装 递归 我应该 | 更新日期: 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的函数。
啊!