2

我遇到了以下帖子,但是很难理解它- self message(non recursive) vs self recursive message

我还在http://www.zicomi.com/messageRecursion.jsp看到了这个例子,希望真实世界的场景会有所帮助,但这让我更加困惑。当订单已传递给厨房和厨师时,为什么需要递归消息。我认为您所需要的只是一条自我信息,即厨师完成订单然后将其传递给服务员。

4

1 回答 1

3

厨师示例的显示和描述可以说是“错误的”。

简单地说,给self的消息只是意味着接下来要调用的方法恰好在同一个对象类中。例如,调用 SavingsAccount.withdraw(anAmount) 可能会调用 SavingsAccount.getBalance() 以确定是否有足够的资金继续提款。

递归调用是对self调用的一种特殊情况,因为它是对相同的方法(具有不同的状态,因此它最终可以从递归调用中返回)。一些问题适合这种解决方案。一个例子是阶乘(参见阶乘)。在没有递归的情况下进行阶乘是不可能的(至少对于所有情况,但最简单的情况是,由于需要大量的内联代码)。如果您查看阶乘代码示例,您会看到调用每次更改一 ( factorial(n-1) ) 并在n达到零时停止。如果没有递归,尝试对像 1,000,000 这样的值进行内联处理是不可行的。

于 2013-04-11T15:07:25.850 回答