我知道递归有时比循环更清晰,而且我不会询问何时应该使用递归迭代,我知道有很多问题已经存在.
我要问的是,递归是否比循环更快?对我来说,似乎总是能够改进循环并让它比递归函数更快地执行,因为循环不会不断地设置新的堆栈帧.
我特别关注在递归是处理数据的正确方法的应用程序中递归是否更快,例如在一些排序函数,二叉树等中.
......还是只是一种做法?
我问这个是因为与我的教授争吵:我因为我们没有在课堂上报道递归而递归调用一个函数而失去了信誉,我的论点是我们通过学习return和方法隐式地学习它.
我在这里问,因为我怀疑有人有明确的答案.
例如,以下两种方法有什么区别:
public static void a() {
return a();
}
public static void b() {
return a();
}
Run Code Online (Sandbox Code Playgroud)
除了" a永远长存"(在实际的程序是正确使用时输入的内容无效,再次提示用户),有没有之间的任何根本区别a和b?对于未经优化的编译器,它们如何以不同方式处理?
归根结底,通过学习可以归结为是否return a()从b我们为此还学会了return a()从a.我们呢?