除了尾递归之外,是否还有其他的尾调用优化方法?我一直在尝试寻找或思考不涉及递归的方法,但没有成功。这是否可能?有没有例子?
除了尾递归之外,是否还有其他的尾调用优化方法?我一直在尝试寻找或思考不涉及递归的方法,但没有成功。这是否可能?有没有例子?
SomeClass doSomething(Argument a) {
log.debug("Doing something");
return this.somethingDoer.doIt(a, this.someExtraData);
}
另一个技术上是相互递归的例子,但通常每个函数只有很少的激活次数(在许多其他函数的激活之间有几十或几百次),是通过每个状态有一个函数实现的状态机,并调用该函数进入该状态:
void stateA() {
// do actual work
// determine which transition applies
stateB();
}
void stateB() {
// do actual work
// determine which transition applies
state...();
}
// dozens, possibly hundreds of other states
int bar(int x);
int foo(int x) { return bar(x); }
foo
可以直接跳转到返回给调用者的 bar
,无需在任何地方进行递归。
bar
的定义,只留下了它的声明。你不能在没有定义的情况下将bar
内联,但是你可以对调用者执行尾递归优化。看到区别了吗? - user541686