haskell - 这个斐波那契序列函数是递归的吗?

标签 haskell recursion

考虑以下(Haskell)代码:

fib=0:1:zipWith (+) fib (tail fib)

一位同事试图断言这不是递归函数,因为 fib只是一个用自身定义自身的列表,并且在某种程度上不同于执行相同操作的函数。我认为他在吸食快克。

你怎么看?

最佳答案

zipWith 的斐波那契定义不是递归函数,实际上不涉及任何函数,fib 是一个懒惰自定义的列表(数据),利用了 Haskell 的懒惰语义。从某种意义上说,你可以称之为递归列表或递归数据;但不是递归函数。

由于很少有编程语言有任何接近的东西,因此可能很难将您的头脑围绕在递归列表上,但是您会注意到在 Haskell 中所有函数都只需要一个参数。 fib不带任何参数,因为它不是函数。由于不涉及函数,因此您不能使用递归函数。

你的同事没有吸食快克,他是开明的(或者吸食快克,如果这是你对启蒙的定义)。

关于haskell - 这个斐波那契序列函数是递归的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980756/

相关文章:

haskell:析取范式函数

haskell - 一次在文件系统上执行多个操作的正确方法是什么?

haskell - 是否可以将 HOAS 函数转换为连续传递样式?

recursion - 在递归函数中链接本地迭代器时出现 Rust 生命周期问题

java - map 与泛型的递归合并

haskell - 是否有 Monad 的实例但没有 MonadFix 的实例?

haskell - 使用仿函数派生类函数的广义新类型

c++ - 递归删除指定数据的链表

c - 打印链接结构的停止条件?

recursion - 为什么这不是尾递归?