C++知识点总结(29):递归练习

一、满足条件的值

1. 审题

已知: S = 1 + 2 + 4 + 7 + 11 + 16 … S=1+2+4+7+11+16… S=1+2+4+7+11+16
递归求解刚好大于等于 5000 5000 5000 S S S 的值。

2. 参考答案

#include <iostream>
using namespace std;// 定义递归函数,计算第x个数的值
int f(int x)
{int r;if (x == 1) r = 1; // 第一个数为 1else r = f(x-1) + x-1; // 第 x 个数为第 x-1 个数加上 x-1return r;
}int main()
{int s = 0, i = 1; // 初始化累加和 s 为 0,计数器 i 为 1while (s <= 5000) // 循环累加直到 s 大于 5000{s += f(i++); // 将第 i 个数的值累加到 s 上,并将 i 自增}cout << s; // 输出累加和return 0;
}

二、递归组合数

1. 审题

n n n 个物品里面选出 m m m 个物品的方案数,记为 C ( n , m ) C(n,m) C(n,m)。对于递归过程如下理解:假设 n n n 个物品里面有一个物品最特殊,挑选时 m m m 个物品时,这个特殊物品假定不需要挑选出来,此时要从 n n n 个物品里选出 m m m 个物品,就相当于要从 n − 1 n-1 n1 个物品里面挑选出 m m m 个物品记为: C ( n − 1 , m ) C(n-1,m) C(n1,m) 。如果挑选出来物品中有这个特殊的物品,则挑选的方式就是从 n − 1 n-1 n1 个物品中挑选出 m − 1 m-1 m1 个物品记为: C ( n − 1 , m − 1 ) C(n-1,m-1) C(n1,m1)。所以 C ( n , m ) = C ( n − 1 , m ) + C ( n − 1 , m − 1 ) C(n,m)=C(n-1,m)+C(n-1,m-1) C(n,m)=C(n1,m)+C(n1,m1)。特别的当 n n n m m m 相等时或者挑选的数是 0 0 0 时,方案数规定为只有 1 1 1 种,表述为 C ( n , n ) = C ( n , 0 ) = 1 C(n,n) = C(n,0) =1 C(n,n)=C(n,0)=1。现在请你从电脑中输入两个正整数,分别表示 n n n m m m,求从 n n n 个物品中选择 m m m 个物品,总共有多少选择方法?

2. 参考答案

#include <iostream>
using namespace std;// 递归计算组合数
int c(int n, int m)
{// 完全按照题目说的来if (n == m || m == 0) return 1;return c(n-1, m) + c(n-1, m-1);
}int main()
{int n, m;cin >> n >> m;cout << c(n, m);
}

三、你的变换

1. 审题

你有一个数 a a a,你想把这个数变成 b b b,为此你可以做两种变换:
① 把现有的数 x x x 变为 2 x 2x 2x;
② 把现有的数 x x x 后面接一个 1 1 1(即 x x x 变为 10 x + 1 10x+1 10x+1
例如:2 -> 4 -> 8 -> 81 -> 162
你需要帮可多判断一下,把 a a a 变成 b b b 的可能性。

2. 参考答案

#include <iostream>
using namespace std;// 递归判断是否存在变换路径
bool transform(int a, int b)
{if (a == b) return 1; // 当 a 和 b 相等时,变换成功,返回 trueif (a > b) return 0; // 当 a 大于 b 时,无法变换,返回 falsereturn transform(a*2, b) || transform(a*10+1, b); // 递归进行两种变换判断
}int main()
{int a, b;cin >> a >> b;cout << (transform(a, b) ? "YES" : "NO"); // 输出是否存在变换路径return 0;
}

四、递归方块

1. 审题

请添加图片描述
给出层数,求方块总数。

2. 参考答案

#include <iostream>
using namespace std;int n;
int sum;int f(int x)
{if (x == 1) return 1;return f(x-1) + x;
}int main()
{cin >> n;while (n){sum += f(n--);}cout << sum;return 0;
}

五、达到回文的次数

1. 审题

回文数的定义为:如果把一个数的各个数位上的数字颠倒过来得到的新数与原数相等,则此数是回文数。 7 , 22 , 131 , 2112 , 31013 , … 7,22,131,2112,31013,… 7,22,131,2112,31013, 都是回文数。对任意给出的一个整数 n n n,经过一系列的处理,最后都能成为回文数。处理的方法是,该数加上它的颠倒数。
例如:
n = 176 n=176 n=176
第一次处理后 176 + 671 = 847 176+671=847 176+671847
第二次处理后 847 + 748 = 1595 847+748=1595 847+7481595
第三次处理后 1595 + 5951 = 7546 1595+5951=7546 1595+59517546
第四次处理后 7546 + 6457 = 14003 7546+6457=14003 7546+645714003
第五次处理后 14003 + 30041 = 44044 14003+30041=44044 14003+3004144044
此时成为回文数,共进行 5 5 5 次处理。
问题:给出 n n n 后,求出使该数按照以上规则进行一系列处理后成为回文数的最少操作次数。

2. 参考答案

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;string n;
int cnt;// 将字符串 n 翻转
string reverse(string n)
{reverse(n.begin(), n.end());return n;
}// 递归函数
void palin(string n)
{string reversed = reverse(n);long long n2 = stoll(n); // string -> long longlong long rev = stoll(reversed); // string -> long longlong long sum = n2 + rev; // 本身 + 颠倒cnt++; // 次数增加if (to_string(sum) == reverse(to_string(sum))) return; // 已经回文return palin(to_string(sum)); // 没有回文,继续递归
}int main()
{cin >> n;if (n != reverse(n)){palin(n);}else{cout << 0;return 0;}cout << cnt;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】使用OPC UA创建数据服务器

目录 准备工作服务器设置创建或获取节点设置节点值启动服务器查看服务器客户端总结 在工业自动化和物联网&#xff08;IoT&#xff09;领域&#xff0c;OPC UA&#xff08;开放平台通信统一架构&#xff09;已经成为一种广泛采用的数据交换标准。它提供了一种安全、可靠且独立于…

Mixed-Query Transformer:统一的图像分割架构

Mixed-Query Transformer:统一的图像分割架构 摘要IntroductionRelated WorkMethodMQ-Former ArchitectureObject Query Strategies Mixed-Query Transformer: A Unified Image Segmentation Architectur 摘要 在现有的一体化图像分割模型中&#xff0c;要么在多个任务上采用统…

学浪已购买视频怎么下载到本地?

许多学习者在学浪购买了丰富的课程&#xff0c;然而&#xff0c;一些课程存在时间限制&#xff0c;使得学习者希望将其下载并永久保存。在这里&#xff0c;我们将介绍一款名为小浪助手的工具&#xff0c;它能够帮助你轻松将学浪已购买的视频下载到本地&#xff0c;让学习变得更…

Django处理枚举(枚举模型)以及source的使用

Django处理枚举-枚举模型 1、定义模型类、序列化器类2、对上面这些场景使用source参数3、支持连表查询4、自定义序列化输出方法5、案例5 1、定义模型类、序列化器类 定义模型类models.py&#xff1b;项目模型类、接口模型类、用例模型类 from django.db import modelsclass T…

图书管理系统!牛逼!

今天给大家分享一套基于SpringbootVue的图书管理系统源码&#xff0c;在实际项目中可以直接复用。(免费提供&#xff0c;文末自取) ​一、系统运行图&#xff08;设计报告和接口文档&#xff09; 1、登陆页面 2、后台页面 3、设计报告包含接口文档 二、系统搭建视频教程 源码…

12-LINUX--进程间的通信

进程间通信&#xff1a;采用IPC机制&#xff08;进程间的用户空间相互独立&#xff0c;内核空间共享&#xff09;&#xff0c;有管道&#xff0c;信号量&#xff0c;共享内存&#xff0c;消息队列&#xff0c;套接字。 一.管道 管道可以用来在两个进程之间传递数据&#xff0c…

终端工具命令行颜色配置(解决终端工具连上服务器之后,无颜色问题)

本期主题&#xff1a; 讲解使用mobaxterm等终端工具连上服务器&#xff0c;但是命令行没有颜色的问题 目录 1. 问题描述2. 原因解释3.测试 1. 问题描述 使用终端工具&#xff08;Mobaxterm等&#xff09;连上服务器之后&#xff0c;发现终端工具没有颜色&#xff0c;如下图&am…

Python学习从0到1 day25 第二阶段 SQL ② Python操作数据库

少年有梦&#xff0c;不应至于心动&#xff0c;更要付诸行动 —— 24.4.12 pymysql 除了使用图形化工具以外&#xff0c;我们也可以使用编程语言来执行SQL从而操作数据库 在Python中&#xff0c;使用第三方库&#xff1a;pymysql来完成对MySQl数据库的操作 安装 pip install py…

GPT4.5发布了?OpenAI终于发布正式版Turbo,重回AI王座第一

令人惊讶的是&#xff0c;短短三个月内&#xff0c;全球最强AI的称号又一次易主了&#xff01;几个月前&#xff0c;Claude3 Opus的性能全面超过了GPT-4&#xff0c;全球网友纷纷转向Claude3&#xff0c;并分享了他们对Claude3的惊艳体验。然而&#xff0c;OpenAI最近再次展示了…

探索GlusterFS:开源分布式文件系统

目录 引言 一、GlusterFS简介 &#xff08;一&#xff09;基本介绍 &#xff08;二&#xff09;GlusterFS特点 &#xff08;三&#xff09;GlusterFS术语 &#xff08;四&#xff09;GlusterFS工作流程 二、GlusterFs的卷类型 &#xff08;一&#xff09;卷类型 &…

【免安装的MATLAB--MATLAB online】

目录&#xff1a; 前言账号的注册图片处理的示例准备图片脚本函数 总结 前言 在计算机、数学等相关专业中&#xff0c;或多或少都会与MATLAB产生藕断丝连的联系&#xff0c;如果你需要使用MATLAB&#xff0c;但是又不想要安装到自己的电脑上&#xff08;它实在是太大了啊&#…

Linux 系统问题排查常用命令

立刻关机 haltcentos安装yum apt-get install yum查找文件夹 find / - name 需要查找文件名称vi里面 查找字符串 “/”&#xff0c;后面跟要查找的字符串&#xff0c;再按回车。vi将光标定位在该串下一次出现的地方上。键入n跳到该串的下一个出现处&#xff0c;键入N跳到该…

正则表达式 速成

正则表达式的作用 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字…

c语言中<string.h>的strstr与strtok函数

c语言中string.h的strstr与strtok函数 代码运行结果 代码 #include <stdio.h> #include <string.h>///1.在字符串str1里面,查找第一次出现str2的位置 //char * strstr(const char * str1,const char * str2)///2.sep为分割符,根据分割符来对str进行分割 //char * …

解决Django中的UnicodeDecodeError问题

在使用Django进行Web开发时&#xff0c;有时会遇到一些由于编码不一致引起的问题&#xff0c;特别是在处理文件读写操作时。一个常见的错误是UnicodeDecodeError&#xff0c;其表现为gbk codec cant decode byte 0xa6 in position 9737: illegal multibyte sequence。这个问题通…

【设计模式学习】单例模式和工厂模式

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

【SpringBoot:详解Bean装配】

&#x1f3e1;Java码农探花&#xff1a; &#x1f525; 推荐专栏&#xff1a;<springboot学习> &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、IoC容器的简介BeanFactory接口源码二、Bean装配扫描装配探索启动类条件装配自定义Bean总…

版本管理|Git -目前最好的版本管理工具

文章目录 什么是版本为什么需要版本管理Git -目前最好的版本管理工具Git的关键特点和概念初始化Git保存代码改变git addgit commit -m ""git statusgit log branch分支管理git branch & git chekoutHEAD的本质git merge 合并fast forward merge 本地与远程如何解…

【一刷《剑指Offer》】面试题 3:二维数组中的查找

力扣对应题目链接&#xff1a;240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; 核心考点&#xff1a;数组相关&#xff0c;特性观察&#xff0c;时间复杂度把握。 一、《剑指Offer》对应内容 二、分析题目 正常查找的过程本质就是排除的过程&#xff0c;谁排除…

【YOLOv9】完胜V8的SOTA模型Yolov9(论文阅读笔记)

官方论文地址&#xff1a; 论文地址点击即可跳转 官方代码地址&#xff1a; GitCode - 开发者的代码家园 官方代码地址点击即可跳转 1 总述 当输入数据经过各层的特征提取和变换的时候&#xff0c;都会丢失一定的信息。针对这一问题&#xff1a; 论文中提出的可编程梯度信息…