day_4——希尔顿序列

希尔顿序列

求解希尔顿序列(Hailstone Sequence),希尔顿序列问题是一个著名的数学问题,至今没有证明其正确性,也没证明其是错误的,即任何一个正整数N,如果是偶数的话就除以2,如果是奇数的话就乘以3再加上1,最后这个数都会变为1。其表达式如下:

H a i l s t o n e ( n ) = { { 1 } ,  if  n  equal  1 { n } ∪  Hailstone  ( n / 2 ) ,  if  n  is even  { n } ∪  Hailstone  ( 3 n + 1 ) ,  if is odd  Hailstone(n)=\left\{\begin{array}{ll}\{1\}, & \text { if } \mathrm{n} \text { equal } 1 \\ \{n\} \cup \text { Hailstone }(n / 2), & \text { if } \mathrm{n} \text { is even } \\ \{n\} \cup \text { Hailstone }(3 n+1), & \text { if is odd }\end{array}\right. Hailstone(n)={1},{n} Hailstone (n/2),{n} Hailstone (3n+1), if n equal 1 if n is even  if is odd 
从中我们可以通过递归发现,每次对n这个数字进行判断奇偶性,采用不同的计算公式,举例说
明:
 Hailstone  ( 3 ) = { 3 } ⋃  Hailstone  ( 3 ∗ 3 + 1 ) = { 3 , 10 } ∪  Hailstone  ( 10 / 2 ) = { 3 , 10 , 5 } ∪  Hailstone  ( 5 ∗ 3 + 1 ) = { 3 , 10 , 5 , 16 } ∪  Hailstone  ( 16 / 2 ) = { 3 , 10 , 5 , 16 , 8 } ∪  Hailstone  ( 8 / 2 ) = { 3 , 10 , 5 , 16 , 8 , 4 } ∪  Hailstone  ( 4 / 2 ) = { 3 , 10 , 5 , 16 , 8 , 4 , 2 } ∪  Hailstone  ( 2 / 2 ) = { 3 , 10 , 5 , 16 , 8 , 4 , 2 , 1 } \begin{array}{l} \text { Hailstone }(3)=\{3\} \bigcup \text { Hailstone }(3 * 3+1) \\ \qquad \begin{array}{l} =\{3,10\} \cup \text { Hailstone }(10 / 2) \\ =\{3,10,5\} \cup \text { Hailstone }(5 * 3+1) \\ =\{3,10,5,16\} \cup \text { Hailstone }(16 / 2) \\ =\{3,10,5,16,8\} \cup \text { Hailstone }(8 / 2) \\ =\{3,10,5,16,8,4\} \cup \text { Hailstone }(4 / 2) \\ =\{3,10,5,16,8,4,2\} \cup \text { Hailstone }(2 / 2) \\ =\{3,10,5,16,8,4,2,1\} \end{array} \end{array}  Hailstone (3)={3} Hailstone (33+1)={3,10} Hailstone (10/2)={3,10,5} Hailstone (53+1)={3,10,5,16} Hailstone (16/2)={3,10,5,16,8} Hailstone (8/2)={3,10,5,16,8,4} Hailstone (4/2)={3,10,5,16,8,4,2} Hailstone (2/2)={3,10,5,16,8,4,2,1}
由于不能证明这个程序的“有穷性”,故不能说该程序是一个算法。

#include <iostream>
using namespace std;
int main()
{
	cout << "the input number is ";
	int n;
	cin >> n;
	cout << "the sequense is: " << n << ' ';
	while (n != 1) {
		if (n & 1) {
			n = n * 3 + 1;
		}
		else
			n /= 2;
		cout << n << ' ';
	}
	return 0;
}

参考内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值