信奥编程入门

第二十四课:递推与迭代

递推与迭代概念

递推与迭代是一种特殊的循环使用方式,处理的是步进的过程,每次循环都会带入新的值进行计算。

传统循环

  • 主要用于遍历
  • 处理已知数量的元素
  • 空间遍历的概念

递推迭代

  • 处理步进过程
  • 循环次数往往未知
  • 类似时间中的探索

角谷猜想示例

问题描述

给定一个数字,如果是奇数就乘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)观察冰雹序列的变化,注意序列长度和数值范围的变化。