C语言好题解析(二)

目录

  • 递归类型
    • 例题1
    • 例题2
    • 例题3
    • 例题4
    • 例题5
    • 例题6

递归类型

例题1

根据下面递归函数:调用函数Fun(2),返回值是多少(       )
int Fun(int n)
{
	if (n == 5)
		return 2;
	else
		return 2 * Fun(n + 1);
}
A.2 B.4 C.8 D.16

【答案】 D
【分析】
1:递归解题思路就是要注意递归的限制条件,满足限制条件时递归就不再继续,且每次递归调用之后都会接近这个限制条件
2:由题目我们可以知道限制条件为n==5,当我们输入比5小的数时,n是以每次增加1的趋势接近限制条件
流程如下(第一次用画图软件,画的不是很好看)
在这里插入图片描述

例题2

通过用递归的方式实现求第n个斐波那契数
例如
输入:5  输出:5
输入:10, 输出:55
输入:2, 输出:1

【分析】
1:斐波那契数定义为:jack(0)=0,jack(1)=1,jack(n)=jack(n-1)+jack(n-2)(n>=2),总之就是第n个数为n的前两个数相加的和
2:我们根据斐波那契数的定义知jack(1)=1,jack(2)=1,因为jack(0)=0所以不管,因此我们设定条件n=1和n=2时返回1(限制条件),而当n>=2是返回jack(n-1)+jack(n-2)实现递归(趋近于限制条件)
【代码】

int jack(int n)
{
	if (1 == n || 2 == n)
	{
		return 1;
	}
	else
	{
		return jack(n - 1) + jack(n - 2);
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", jack(n));
	return 0;
}

例题3

编写一个函数实现n的k次方,使用递归实现

【分析】
1:根据递归我们需要限制条件,因为n在输入之后就无法改变,因此我们需要对k进行设置,即0==k时我们返回1
2:当k大于0时我们为了让其趋近于限制条件,因此k每次递推后就需要减1
【代码】

int jack(int n, int k)
{
	int sum = 0;
	if (0 == k)
	{
		sum = 1;
		return sum;
	}
	else if (k > 0)
	{
		k = k--;
		sum = n * jack(n, k);
		return sum;
	}
	else
		return 0;
}
int main()
{
	int n, k;
	scanf("%d %d", &n, &k);
	printf("%d ",jack(n, k));

	return 0;
}

例题4

写一个递归函数DigitSum(n),输入一个非负整数
返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9
它的和是19
输入:1729,输出:19

【分析】
1:在看到返回值为个位 十位 百位…数字时,我们一般都会用到求余(%),这样就可以将每位数单独提出来
2:因为是要用到递归,因此我们需要限制条件,即当n<10时直接返回n(个位数),而要有使递推趋近限制条件就需要用/号,这样就会把最后一位数消去
【代码】

int jack(int n)
{
	if (n < 10)
		return n;
	else
	{
		int sum = n % 10 + jack(n / 10);
		return sum;
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", jack(n));
	return 0;
}

例题5

递归实现求n的阶乘(不考虑溢出的问题)

【分析】
我们以n==1返回1作为限制条件,然后每次n减1
【代码】

int jack(int n)
{
	int sum = 0;
	if (n > 1)
	{
		sum = n * jack(n - 1);
		return sum;
	}
	if (1 == n)
	{
		sum = 1;
		return sum;
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", jack(n));
	return 0;
}

我们对前面的代码进行一些优化如下
【代码】

int jack(int n)
{
if(n==1)
return 1;
return n*jack(n-1);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", jack(n));
	return 0;
}

例题6

递归方式实现打印一个整数的每一位

【分析】
这道题和例题4几乎一样,所以就不进行分析了
【代码】

void jack(int n)
{
	if (n >= 0)
	{
		if (n <= 9)
		{
			printf("%d ", n);
		}
		else
		{
			int sum = 0;
			sum= n % 10;
			jack(n / 10);
			printf("%d " ,sum);
		}
	}
}
int main() 
{
	int n = 0;
	scanf("%d", &n);
	jack(n);
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vs code 环境变量的配置

问题 环境变量中重复出现下面这两项 ..:/home/xxx/.local/bin/:/home/xxx/.local/bin/:...这造成了一些环境污染&#xff0c;因为/home/xxx/.local/bin 这个环境变量放在前面&#xff0c;文件夹里面的可执行的文件会比conda环境更加优先地执行。 解决 先说结论&#xff0c;…

Postman的高级用法—Runner的使用​

1.首先在postman新建要批量运行的接口文件夹&#xff0c;新建一个接口&#xff0c;并设置好全局变量。 2.然后在Test里面设置好要断言的方法 如&#xff1a; tests["Status code is 200"] responseCode.code 200; tests["Response time is less than 10000…

【Git】—— 标签管理

目录 &#xff08;一&#xff09;理解标签 1、作用 &#xff08;二&#xff09;创建标签 &#xff08;三&#xff09;操作标签 1、删除标签 2、推送标签 3、删除远程标签 &#xff08;一&#xff09;理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的…

JavaWeb 速通 EL 和 JSTL

目录 一、EL表达式 1.快速入门 : 1.1 基本介绍 1.2 入门案例 2.常用输出形式 : 2.1 创建JavaBean类 2.2 创建JSP文件 3.empty运算符 : 3.1 介绍 3.2 实例 4.EL对象 : 4.1 EL11个内置对象 4.2 域对象演示 4.3获取HTTP信息 二、JSTL标签库 1.基本介绍 : 2.core核心库常用标…

corosync+pacemaker+nfs配置简单高可用

环境准备&#xff1a; 每个节点提供20G共享存储 web1192.168.134.176node7web2192.168.134.177node8 一、准备web环境&#xff08;两台web测试机都要准备&#xff09; yum install httpd -y echo " web test page ,ip is hostname -I." > /var/www/html/index…

【QT+ffmpeg】QT+ffmpeg 环境搭建

1.qt下载地址 download.qt.io/archive/ 2. win10sdk 下载 https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ 安装 debug工具路径 qtcreater会自动识别 调试器选择

OpenAI全球招外包大军,手把手训练ChatGPT取代码农 ; 码农:我自己「杀」自己

目录 前言 OpenAI招了一千多名外包人员&#xff0c;训练AI学会像人类一样一步步思考。如果ChatGPT「学成归来」&#xff0c;码农恐怕真的危了&#xff1f; 码农真的危了&#xff01; 当时OpenAI也说&#xff0c;ChatGPT最合适的定位&#xff0c;应该是编码辅助工具。 用Cha…

【学会动态规划】等差数列划分(22)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

easyx图形库基础:2.基本运动+键盘交互

基本运动键盘交互 一.基本运动1.基本运动&#xff1a;1.如何实现动画&#xff1a;2.实现一个小球从左到右从右到左&#xff1a;&#xff08;往返运动&#xff09;3.实现一个五角星的移动&#xff1a;4.实现一个五角星自转和圆周运动的集合&#xff1a;&#xff08;圆周运动&…

Opencv4基于C++基础入门笔记:图像 颜色 事件响应 图形 视频 直方图

效果图◕‿◕&#xff1a;opencv人脸识别效果图(请叫我真爱粉)✌✌✌先看一下效果图勾起你的兴趣&#xff01; 文章目录&#xff1a; 一&#xff1a;环境配置搭建 二&#xff1a;图像 1.图像读取与显示 main.cpp 运行结果 2.图像色彩空间转换 2.1 换色彩 test.h t…

java八股文面试[java基础]——String StringBuilder StringBuffer

String类型定义&#xff1a; final String 不可以继承 final char [] 不可以修改 String不可变的好处&#xff1a; hash值只需要算一次&#xff0c;当String作为map的key时&#xff0c; 不需要考虑hash改变 天然的线程安全 知识来源&#xff1a; 【基础】String、StringB…

latex 笔记:cs论文需要的排版格式

主要针对英文文献 1 基本环境 连字符 不同长度的"-"表示不同含义。 一个"-"长度的连字符用于词中两个"-"长度的连字符常用于制定范围三个"-"长度的连字符是破折号数学中的负数要用数学环境下的-得到 强调 在正式文章中, 通常不…

探索区块链世界:去中心化应用(DApp)的崭新前景

随着科技的不断发展&#xff0c;区块链技术逐渐引领着数字时代的潮流。在这个充满创新和变革的领域中&#xff0c;去中心化应用&#xff08;DApp&#xff09;成为了备受瞩目的焦点。DApp 不仅改变了传统应用程序的范式&#xff0c;还在金融、社交、游戏等多个领域展现出了广阔的…

File Upload

File Upload 文件上传功能是大部分WEB应用的常用功能&#xff0c;网站允许用户自行上传头像、照片、一些服务类网站需要用户上传证明材料的电子档、电商类网站允许用户上传图片展示商品情况等。然而&#xff0c;看似不起眼的文件上传功能如果没有做好安全防护措施&#xff0c;…

【数理知识】向量与基的内积,Matlab 代码验证

序号内容1【数理知识】向量的坐标基表示法&#xff0c;Matlab 代码验证2【数理知识】向量与基的内积&#xff0c;Matlab 代码验证 文章目录 1. 向量与基的内积2. 二维平面向量举例3. 代码验证Ref 1. 向量与基的内积 假设存在一个二维平面内的向量 a ⃗ \vec{a} a &#xff0c…

具身智能:人工智能的下一个浪潮

原创 | 文 BFT机器人 特斯拉 2023 年股东会上&#xff0c;马斯克强调了人形机器人对特斯拉未来的重要性&#xff0c;并预测其将成为公司的主要长期价值来源。他进一步表示&#xff1a;“如果人形机器人和人的比例大致为2比1&#xff0c;那么人们对机器人的需求可能达到100亿乃…

W5100S-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W5100S-EVB-PICO 开发板在TCP Client和TCP Server模式下&#xff0c;分别进行数据回环测试&#xff0c;本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram …

爬虫逆向实战(十三)--某课网登录

一、数据接口分析 主页地址&#xff1a;某课网 1、抓包 通过抓包可以发现登录接口是user/login 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个password加密参数&#xff0c;还有一个browser_key这个可以写死不需要关心 请求头…

【Image captioning】ruotianluo/self-critical.pytorch之1—数据集的加载与使用

【Image captioning】ruotianluo/self-critical.pytorch之1—数据集的加载与使用 作者&#xff1a;安静到无声 个人主页 数据加载程序示意图 使用方法 示例代码 #%%from __future__ import absolute_import from __future__ import division from __future__ import print_…

导读-Linux简介

Linux简介 ​ 总所周知&#xff0c;计算机系统包含硬件和软件两部分。硬件部分被称为裸机&#xff0c;主要包括中央处理器&#xff08;CPU&#xff09;、内存、外存和各种外部设备。软件部分主要包括系统软件和应用软件两部分。系统软件包括操作系统、汇编语言、编译程序、数据…