考虑以下(Haskell)代码:
fib=0:1:zipWith (+) fib (tail fib)
一位同事试图断言这不是递归函数,因为
fib
只是一个用自身定义自身的列表,并且在某种程度上不同于执行相同操作的函数。我认为他在吸食快克。你怎么看?
最佳答案
zipWith 的斐波那契定义不是递归函数,实际上不涉及任何函数,fib 是一个懒惰自定义的列表(数据),利用了 Haskell 的懒惰语义。从某种意义上说,你可以称之为递归列表或递归数据;但不是递归函数。
由于很少有编程语言有任何接近的东西,因此可能很难将您的头脑围绕在递归列表上,但是您会注意到在 Haskell 中所有函数都只需要一个参数。 fib
不带任何参数,因为它不是函数。由于不涉及函数,因此您不能使用递归函数。
你的同事没有吸食快克,他是开明的(或者吸食快克,如果这是你对启蒙的定义)。
关于haskell - 这个斐波那契序列函数是递归的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980756/