C++ Stern-Brocot序列
本文旨在实现一个打印Stern-Brocot序列的程序。
Stern-Brocot序列,也被称为Stern氏二元序列,是以下方式生成的数字序列。
1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5, 2, 5, 3, …
虽然人们可能发现Stern-Brocot序列与Fibonacci序列0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …相似。
Stern-Brocot序列与Fibonacci序列的不同之处在于Fibonacci序列的生成方法。在Fibonacci序列中,序列中的每个数字都恰好等于其前两个数字的总和。根据Fibonacci序列的规则,序列中的每个数字都是其前两个数字的和。例如,0+1=1, 1+1=2, 1+2=3, 2+3=5, 3+5=8, 5+8=13等等。
现在我们来介绍Stern-Brocot序列,这里我们不仅考虑数字的和,还有一点点更多。我们已经详细说明了如何产生Stern-Brocot序列。因此,为了更深入地理解Stern-Brocot序列,让我们深入了解本文。
问题陈述
实现一个程序来打印Stern-Brocot序列。
解释
序列的第一个和第二个元素是1:
[1, 1]
现在考虑序列的第二个元素。
将所考虑的元素与其前一个元素相加,然后将其附加到序列的末尾:(即1 + 1= 2)
[1, 1, 2]
将所考虑的元素放到序列的末尾:
[1, 1, 2, 1]
选择序列的下一个元素(即2)
将其与其前一个元素相加,然后将其附加到序列的末尾:(即2+1=3)
[1, 1, 2, 1, 3]
将所考虑的元素放到序列的末尾:
[1, 1, 2, 1, 3, 2]
下一个要考虑的元素是第4个元素(即1)
将其与其前一个元素相加,然后将其附加到序列的末尾:(即1+2=3)
[1, 1, 2, 1, 3, 2, 3]
将所考虑的元素放到序列的末尾:
[1, 1, 2, 1, 3, 2, 3, 1]
系列如下,要考虑的下一个元素是第5个元素。那是3。
因此,该系列为1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5, 2, 5, 3, ….
算法
步骤1 : 开始。
步骤2 : 定义n1=1, n2=1, n3, i和number。
步骤3 : 给number赋一个值。
步骤4 : 运行循环。
步骤5 : 将n1和n2相加并将值赋给n3。
步骤6 : 打印n3和n2。
步骤7 : 更新n1和n2的值。
步骤8 : 继续循环直到停止。
步骤9 : 停止。
以下是一个打印Stern-Brocot序列的C程序
示例
#include<stdio.h>
int main(){
int n1=1, n2=1, n3, i, number=9;
printf("Stern-Brocot Sequence:");
printf("\n%d %d",n1,n2);//printing 1 and 1
for(i=2; i<number; i++) {
n3=n1+n2;
printf(" %d",n3);
printf(" %d",n2);
n1=n2;
n2=n3;
}
return 0;
}
输出:
执行后,会产生以下输出:
Stern-Brocot Sequence:
1 1 2 1 3 2 5 3 8 5 13 8 21 13 34 21
结论
同样地,我们可以通过输入要打印的元素的限制来打印Stern-Brocot序列。
这篇文章解决了获取Stern-Brocot序列的挑战。这里提供了C编程代码以及打印Stern-Brocot序列的算法。