【C++】高级分析递归函数编程题

发布于:2024-12-18 ⋅ 阅读:(38) ⋅ 点赞:(0)

在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

在这里插入图片描述


在这里插入图片描述


💯前言

  • 递归运算模型统计结构化计算中的基本方法,在计算任务中保持着致典场景。它通过归纳备忘式技巧,能够有效地解决大规模很大量的重复计算问题,特别在处理必须不断重复运算的情况中解决相关难题。
    本文对一个深层次的递归问题进行全面解析和扩展,通过详细分析模型,提供完整的解决思路实现代码应用场景。本文目标在于提升计算效率,展示备忘式递归大数据处理实际问题中的应用。通过学习此问题,学习者可熟练于大规模重复解算备忘式技巧,为深入研究托底基础。
    C++ 参考手册
    在这里插入图片描述

💯题目介绍

给定一个递归函数 f(x),它的定义如下:

  1. x = 1 x = 1 x=1 时, f ( x ) = 1 f(x) = 1 f(x)=1
  2. x > 1 x > 1 x>1 且为奇数时,递归计算两个值:
    f ( x ) = f ( x − 1 2 ) + f ( x + 1 2 ) f(x) = f\left(\frac{x-1}{2}\right) + f\left(\frac{x+1}{2}\right) f(x)=f(2x1)+f(2x+1)
  3. x > 1 x > 1 x>1 且为偶数时,递归计算半值:
    f ( x ) = f ( x 2 ) f(x) = f\left(\frac{x}{2}\right) f(x)=f(2x)

本模型给出了一种解法的逻辑条件,过程中充分考虑了奇偶性数值中的性质。


💯输入和输出格式

输入格式:

  • 第一行是正整数 T T T ,表示数据组数( T ≤ 100 T \leq 100 T100)。
  • 之后 T T T 行,每行输入一个正整数 x x x ,范围: x ≤ 1 0 9 x \leq 10^9 x109

输出格式:

  • 对每组数据,输出一行结果,即 f ( x ) f(x) f(x) 的值。

示例:

输入:
3
1
3
10

输出:
1
2
3

💯模型解析


1. 奇偶性分析

递归模型根据 x x x 的奇偶性进行分析:

  • 奇数情况:当 x x x 为奇数时,通过将其分解为 x − 1 2 \frac{x-1}{2} 2x1 x + 1 2 \frac{x+1}{2} 2x+1,进行递归计算。这种计算方式将奇数进一步进行重组,通过维持模型方程的充分实施,处理加素区间的计算维度。

  • 偶数情况:当 x x x 为偶数时,递归直接变为 x 2 \frac{x}{2} 2x,让全部计算算法至此缩短,同时模型的逻辑也可以短期事项优化。


2. 备忘式递归技巧

为了防止重复运算,在递归中使用 unordered_map 存储已经计算过的结果,即备忘式递归。它的工作原理如下:

  1. 在计算之前,检查结果是否存在。
  2. 若存在,直接返回结果。
  3. 若不存在,递归计算,并将结果保存起来。

💯代码实现

#include <bits/stdc++.h>
using namespace std;

unordered_map<long long, long long> dp; // 备忘式存储

long long f(long long x) {
    if (x == 1) return 1; 
    if (dp.find(x) != dp.end()) return dp[x];

    long long res;
    if (x % 2 == 0) {
        res = f(x / 2); 
    } else {
        res = f((x - 1) / 2) + f((x + 1) / 2);
    }
    dp[x] = res; 
    return res;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    cin >> T;
    while (T--) {
        long long x;
        cin >> x;
        cout << f(x) << "\n";
    }
    return 0;
}

在这里插入图片描述


💯小结

  • 在这里插入图片描述
    递归模型备忘式技巧是解决大规模处理问题的重要手段。通过本文中的分析,可以完成备忘式递归的优化实现,大大提高运算效率备忘式递归的思想在解决重复运算问题时具有普遍性,学习者可供之作为基础,为后继的处理大规模问题托底基础。
    本文通过代码实现分析,完全解释了备忘式递归的逻辑,为处理实际问题提供了具体应用。缺乏此类技巧将导致重复计算添加大量运行时间,因此熟练掌握此类技术对于进阶研究实际应用都具有深远意义

在这里插入图片描述



网站公告

今日签到

点亮在社区的每一天
去签到