首页 > 解决方案 > 一个函数怎么可能调用自己

问题描述

我知道递归,但我不知道它怎么可能。我将使用下面的例子来进一步解释我的问题。

(def (pow (x, y))
     (cond ((y = 0) 1))
           (x * (pow (x , y-1))))

上面的程序是用 Lisp 语言编写的。我不确定语法是否正确,因为我在脑海中想出了它,但它会做。在程序中,我定义了函数 pow,并在 pow 中调用自身。我不明白它是如何做到这一点的。据我所知,计算机必须在定义函数之前对其进行完全分析。如果是这种情况,那么当我使用 pow 时,计算机应该会给出一条未定义的消息,因为我在它被定义之前就使用了它。我所描述的原理是当您在 x = x + 1 中使用 x 时起作用的原理,而 x 之前没有定义。

标签: recursionlispcomputer-scienceenvironment

解决方案


据我所知,计算机必须在定义函数之前对其进行完全分析。

当编译器看到定义了一个函数 POW 时,它会告诉自己:现在我们正在定义函数 POW。如果它在定义中看到对 POW 的调用,那么编译器会对自己说:哦,这似乎是对我当前正在编译的函数的调用,然后它可以创建代码来进行递归调用。


推荐阅读