相关疑难解决方法(0)

在Haskell中生成Fibonacci数?

在Haskell中,如何基于第n个Fibonacci数等于第(n-2)个Fibonacci数加上第(n-1)个Fibonacci数的属性生成Fibonacci数?

我见过这个:

fibs :: [Integer]
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

我真的不明白,或者它是如何产生无限列表而不是包含3个元素的列表.

我如何通过计算实际定义来编写haskell代码,而不是通过使用list函数做一些非常奇怪的事情?

haskell fibonacci

49
推荐指数
5
解决办法
4万
查看次数

在Haskell中使用zipWith输出斐波那契数的优雅方式

我在Haskell中看到了斐波那契数的这种实现方式,但我仍在试图弄清楚为什么它可以正常工作。因此,很显然,可以使用zipWith函数以非常紧凑的方式编写斐波那契数。该实现如下所示

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

为了更好地了解此处发生的情况,我查看了zipWith函数的文档。此函数使用给定的函数(a-> b-> c)将两个列表[a],[b]一起添加。在我们的例子中,该功能是一个简单的添加。如果两个列表[a]和[b]的长度不同(在我们的例子中,列表[b]总是比列表[a]短一个元素),则zipWith只是从两个列表的开头开始并将它们相加。如果到达一个列表的末尾,则无论已到达另一个列表的末尾,它都会停止。

在递归的第一步中,使用[0,1]和tail [0,1] = [1]调用zipWith。这导致另一个1 => [0,1,1]。在递归的第二步中,使用[0,1,1]和[1,1]调用zipWith,导致[0 + 1,1 + 1] = [1,2]。因此,对我来说,很明显,递归创建了正确的斐波那契数字,但是我不完全理解为什么仅将zipWith步骤之后的最后一个数字添加到结果中,而不是整个列表中。也许有人可以向我解释。那会很有帮助。非常感谢你。

haskell fibonacci zipwith

1
推荐指数
1
解决办法
79
查看次数

标签 统计

fibonacci ×2

haskell ×2

zipwith ×1