递推与迭代概念
递推与迭代是一种特殊的循环使用方式,处理的是步进的过程,每次循环都会带入新的值进行计算。
传统循环
- 主要用于遍历
- 处理已知数量的元素
- 空间遍历的概念
递推迭代
- 处理步进过程
- 循环次数往往未知
- 类似时间中的探索
角谷猜想示例
问题描述
给定一个数字,如果是奇数就乘3加1,如果是偶数就除以2,直到变为1。输出整个变化过程。
示例
输入: 5
输出:
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
END
冰雹序列
这个序列被称为冰雹序列,因为数字会像冰雹形成时一样上下波动,最终落到1。
代码实现
#include <iostream>
using namespace std;
int main() {
long long n; // 使用long long防止溢出
cin >> n;
while (n != 1) {
if (n % 2 == 0) {
cout << n << "/2=" << n/2 << endl;
n /= 2;
} else {
cout << n << "*3+1=" << n*3+1 << endl;
n = n * 3 + 1;
}
}
cout << "END" << endl;
return 0;
}
重要提示
必须使用long long而非int,因为某些数字(如27)在过程中会变得非常大,可能超出int范围导致错误。
关键要点
迭代过程
每次循环都将新的值带回,继续进行计算,直到满足终止条件。
未知次数
循环次数往往是未知的,只知道终止条件,这是while循环的典型场景。
重点分析
需要分析步进过程中每一步的运算、使用的参数以及参数的变化。
数据范围
注意数值可能超出int范围,应使用long long类型防止溢出。
动手实践
尝试输入不同的数字(如27)观察冰雹序列的变化,注意序列长度和数值范围的变化。