是否有时候使用递归代替任何其他方法更好?通过递归,我指的是:
int factorial(int value)
{
if (value == 0)
{
return 1;
} else
{
return value * factorial(value - 1);
}
}
答案 0 :(得分:3)
嗯,我可以想到几个原因。
递归通常比纯粹的迭代解决方案更容易理解。例如,在recursive-descent parsers。
在支持tail call optimization的编译器中,在迭代中使用递归没有额外的开销,并且它通常会导致更少的代码行(因此,更少的错误)
答案 1 :(得分:1)
首先,你的例子没有任何意义。 你编写它的方式只会导致无限循环而没有任何结果。
“真实”功能更像是这样:
int factorial(int value)
{
if (value == 0)
return 1;
else
return value * factorial(value - 1);
}
当然你可以用循环完成同样的事情(甚至可能更好,特别是如果函数调用会导致堆栈帧的惩罚)。通常,当人们使用递归时,他们会这样做,因为它更容易阅读(对于某些问题域)。