【发布时间】:2017-01-23 19:33:36
【问题描述】:
我是一个完整的 Haskell 初学者,刚刚遇到以下构造斐波那契数列的简洁表达式:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
我想我了解每个单独的部分在做什么(:、zipWith、tail),并且我知道某种递归正在发生,但不太确定如何发生。
【问题讨论】:
标签: haskell recursion fibonacci
我是一个完整的 Haskell 初学者,刚刚遇到以下构造斐波那契数列的简洁表达式:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
我想我了解每个单独的部分在做什么(:、zipWith、tail),并且我知道某种递归正在发生,但不太确定如何发生。
【问题讨论】:
标签: haskell recursion fibonacci
前两个值是 0 和 1。此后,通过添加当前和前一个系列,并移动一个位置来附加(压缩)元素。
例如,如果“当前”列表是 (0, 1, 1, 2, 3, 5),那么尾部是 (1, 1, 2, 3, 5)。添加这些给我们...
fibs = (0, 1, 1, 2, 3, 5)
tail = (1, 1, 2, 3, 5)
sum = (1, 2, 3, 5, 8)
这给了我们表达式
0: 1: (1, 2, 3, 5, 8)
... 这导致列表的单元素扩展。当我们无限循环时,我们得到了斐波那契数列。
【讨论】: