Ruby Fibonacci示例 类斐波那契 def计算(n) 如果n> 102334155
我正在努力理解这个节目。我知道如果calc方法不是0或1,它会递归调用calc方法两次,但我不知道它是如何为序列获取正确的数字的Ruby Fibonacci示例 类斐波那契 def计算(n) 如果n> 102334155,ruby,Ruby,我正在努力理解这个节目。我知道如果calc方法不是0或1,它会递归调用calc方法两次,但我不知道它是如何为序列获取正确的数字的 我知道这是我的经验不足,但有人能解释一下这是如何正确计算fib序列的吗?它只是没有为我点击。让我们以n==3为例: 第一次迭代:n不是0或1,因此guard子句不为true。因此,我们将计算calc(2)+calc(1) 调用calc(2):我们调用calc(1)+calc(0)。这两个都满足guard子句,因此分别返回1和0。因此,此计算的结果是1 调用calc(1
我知道这是我的经验不足,但有人能解释一下这是如何正确计算fib序列的吗?它只是没有为我点击。让我们以
n==3
为例:
第一次迭代:n
不是0
或1
,因此guard子句不为true。因此,我们将计算calc(2)+calc(1)
调用calc(2)
:我们调用calc(1)+calc(0)
。这两个都满足guard子句,因此分别返回1
和0
。因此,此计算的结果是1
调用calc(1)
:触发guard子句并返回1
现在我们将两个1
s相加,得到正确的结果,2
尝试对较高的
n
值应用相同的推理,并记住此实现是非常浪费的,因为它会重复计算相同的值。当您无法理解代码在做什么时,您可能不得不使用puts
语句对其进行附加。对于递归,改变缩进以显示方法何时调用自身以及何时返回也很有帮助。这里有一种方法可以用于代码
class Fibonacci
def calc(n)
return n if n < 2
return calc(n - 1) + calc(n - 2)
end
end
puts Fibonacci.new.calc(40)
>> 102334155
导致打印以下内容。我不会提供运行注释,当您阅读代码时,它应该是不言自明的
calc(4)
和
calc(4)
返回3
你的问题不清楚。你能澄清一下吗?你知道什么是斐波那契数吗?你知道它(通常)是如何定义的吗?你明白这个定义吗?你知道如何用笔和纸手工计算斐波那契数吗?你试过了吗?你试过用笔和纸手工执行代码吗?哦,顺便说一句:“有人能给我解释一下这是如何正确计算斐波那契序列的吗?”——它不是在计算斐波那契序列,而是在计算斐波那契序列的第n个数。可能是
calc(4)
entered calc(4)
calling calc(3)
entered calc(3)
calling calc(2)
entered calc(2)
calling calc(1)
entered calc(1)
returning n=1
calc(1) returned m1=1 to calc(2)
calling calc(0)
entered calc(0)
returning n=0
calc(0) returned m2=0 to calc(1)
returning m1+m2=1
calc(2) returned m1=1 to calc(3)
calling calc(1)
entered calc(1)
returning n=1
calc(1) returned m2=1 to calc(2)
returning m1+m2=2
calc(3) returned m1=2 to calc(4)
calling calc(2)
entered calc(2)
calling calc(1)
entered calc(1)
returning n=1
calc(1) returned m1=1 to calc(2)
calling calc(0)
entered calc(0)
returning n=0
calc(0) returned m2=0 to calc(1)
returning m1+m2=1
calc(2) returned m2=1 to calc(3)
returning m1+m2=3