Lucas序列是一个数字序列,序列的第一个数字是2,Lucas序列的第二个数字是1,要生成序列的下一个数字,我们把前面两个数字相加,例如序列的前六个数字是:2, 1, 3, 4, 7, 11,...
编写一个方法lucasSequence,该方法接受一个表示长度的数字作为参数。该方法应返回一个包含Lucas序列的数组,其长度不超过给定长度。递归解决此问题。
def lucas_sequence(length)
return [] if length == 0
return [2] if length == 1
return [2, 1] if length == 2
seq = lucas_sequence(length - 1)
next_el = seq[-1] + seq[-2]
seq << next_el
seq
end
p lucas_sequence(0) # => []
p lucas_sequence(1) # => [2]
p lucas_sequence(2) # => [2, 1]
p lucas_sequence(3) # => [2, 1, 3]
p lucas_sequence(6) # => [2, 1, 3, 4, 7, 11]
p lucas_sequence(8) # => [2, 1, 3, 4, 7, 11, 18, 29]
**我很难理解这背后的递归逻辑。有人能解释一下计算机是如何解决这个问题的吗?计算机是否读取长度,然后从[2,1]开始累加,直到达到其长度?如果是这样,它是如何持续倒计时的**
所以它本质上是一个修正的斐波那契序列。解决大多数结构化序列的最佳方法是使用枚举器,例如。
lucas = Enumerator.new do |y|
a,b = 2,1
loop do
y << a
a, b = b, a + b
end
end
然后
lucas.first(10)
#=> [2, 1, 3, 4, 7, 11, 18, 29, 47, 76]
首先,我们创建一个新的枚举器,然后将a和b分配给起始值(分别为2和1)。
为了生成序列,我们使用一个循环,它将延迟地将值生成给yielder(y
)。
在这里,我们推入a
,然后我们将a
分配给b
s值,将b
s值分配给a b
并行以避免在添加a
b
之前覆盖a
。
递归是数学归纳法的编程等价物。给定一个序列,假设该序列的前一个成员的问题已解决,并提供生成此成员的规则。
因此,请考虑以下几行:
def lucas_sequence(length)
seq = lucas_sequence(length - 1) # <1>
next_el = seq[-1] + seq[-2] # <2>
seq << next_el # <3>
seq # <4>
end
也就是说:
>
把那个较短序列的最后两个成员加起来。。。
。。。并将总和附加到较短的序列中。。。
。。。结果就是这个序列,就是你要求的序列。
这基本上就是它的全部!唯一的问题是没有地方可以开始。我们假设对于长度4的seq,我们已经解决了3个,我们假设我们已经解决了2个,我们假设我们已经解决了1个...但是我们实际上还没有解决这些问题!
因此,我们首先支持最严重的案件:
return [] if length == 0
return [2] if length == 1
return [2, 1] if length == 2
如果长度是0、1或2,问题就解决了,因为我们直接给出这些答案。好吧,如果长度是3,我们参考2求解,这是已知的。好吧,如果长度是4,我们参考3求解,我刚刚告诉了你如何做到这一点。好吧,如果长度是5,我们参考4求解,我刚刚告诉了你如何做到这一点。以此类推,对于你想给我的任何长度。
我正在尝试编写一个ruby方法,它可以递归地执行合并排序。我有这个方法,但这是一次我偶然得到它的工作,所以我不知道它为什么工作,并很想了解我写的代码是如何工作的。在psuedocode中,我遵循的步骤如下所示。 拆分长度为n的原始数组,直到我拥有长度为1的n个数组 一次合并和排序长度为m的2个数组,以返回长度为m*2的数组 重复上述步骤,直到我有一个长度为n的当前排序数组 基本上,在我看来,这是一
本文向大家介绍Ruby范围作为序列,包括了Ruby范围作为序列的使用技巧和注意事项,需要的朋友参考一下 示例 范围最重要的用途是表达序列 语法: 要么 最重要的end值必须大于begin,否则将不返回任何值。 例子:
作为一个入门级的程序员,用ruby写的一个小脚本,可以采集某人才网的人才数据,写的不好。头一次发布,希望大大们批评指正。 采集某网站的人才数据,保存到csv文件中,同时导入数据库
本文向大家介绍Ruby中的变量,包括了Ruby中的变量的使用技巧和注意事项,需要的朋友参考一下 Ruby变量 Ruby支持以下类型的变量: 实例变量 类变量 局部变量 全局变量 1)实例变量 一个实例变量总是开头@。如果您不初始化实例变量,那么它将在编译时从编译器获取nil值。它们的值对于对象的某些实例是有限的或局部的。存在一个实例变量的多个副本,并且同一类的每个对象都可以访问其实例变量的本地副本
在Apache上运行ruby文件需要启用。Apache还可以通过FastCGI处理ruby文件。在即FastCGI的帮助下,可以使用多个版本的。 还可以安装apache乘客并配置Apache以使用它来提供ruby页面。 (Phusion Passenger也称为“乘客”是一个免费的Web服务器模块,旨在与Apache和Nginx集成) 在服务器上安装的步骤如下 - 如何使用Apache运行Ruby
我是Ruby的新手,正在尝试我在Ruby中的前几个程序来理解这些概念。现在,在类方法概念中,在尝试基础知识时,我遇到了以下问题。 我有一个类方法“Servers.valid_requestor”。 这应该检查提供的用户名是否有效,它基于我正在使用的预定义用户名,如果是,它应该在main中执行某些代码。 现在这里的问题是,每当我尝试使用myI获取用户名nput.user_name它返回my_inpu