【新手解答9】深入探索 C 语言:递归与循环的应用2

news2024/9/20 10:34:09

C语言的相关问题解答

  • 写在最前面
  • 问题交流
    • 递归和循环
      • `if-else` 和循环的结合
    • 递归中的 `if-else`
      • 例子
    • 递归是否形成循环?可以理解为特殊形式的循环
      • 递归示例:计算阶乘
      • 递归与循环的区别
    • 结论

写在最前面

一位粉丝私信交流,回想起了当初的我C语言一题写一下午的,而且很多概念糊糊的不清楚。借助这次机会,整理了相关 C 语言中最常见而关键的疑惑,并对概念进行解答。

这章重点:
澄清一下关于递归、循环以及 if-else 判断的关系,以及它们在编程中的作用。

本篇博客的前身:
【新手解答1】深入探索 C 语言:变量名、形参 + 主调函数、被调函数 + 类和对象 + 源文件(.c 文件)、头文件(.h 文件)+ 库
【新手解答2】深入探索 C 语言:变量名、变量 + 函数声明 vs 函数定义 + main的声明 + 头文件和源文件的关系
【新手解答3】深入探索 C 语言:头文件提供必要的接口、源文件保持实现细节的私有性 + 进一步学习的方向 + 如何快速编写程序并最终能制作小游戏
【新手解答4】深入探索 C 语言:全局变量声明、全局函数声明 + 宏定义
【新手解答5】深入探索 C 语言:宏中的文本、标识符和字符串 + 递归运算、条件语句、循环 + switch-case 与多项条件和枚举的差别
【新手解答6】深入探索 C 语言:算法流程图(条件判断、循环)+ 字符常量 + switch的具体用法 + 关于namespace + import vs include
【新手解答7】深入探索 C 语言:代码缩进 + 变量作用域、静态变量 + 变量名和函数名重名
【新手解答8】深入探索 C 语言:递归与循环的应用

如有不对的地方欢迎指出!好久没接触C了hh

问题交流

在这里插入图片描述

我想问的其实是else后面,需要重新投入判断条件进行循环,这样的话该怎么处理?
我发现使用if和循环都有判断条件或者说是起始条件吧
那这就又回到上面那个问题了,递归到底有没有达成循环什么的?(等等,好像又绕进去了,有点懵)

递归和循环

递归和循环都是用来重复执行代码的结构,但它们的工作方式不同:

  • 递归:在递归中,函数通过调用自身来重复执行。每次调用都会接近于结束条件。递归通常用于问题可以自然分解为相似子问题的场景。

  • 循环:循环(如 whilefor)通过重复执行代码块直到满足结束条件来处理重复任务。循环适合于执行固定次数的操作或在特定条件下持续执行。

if-else 和循环的结合

if-else 语句可以与循环结合使用,以在循环中根据不同条件执行不同的操作。例如,你可以在循环内部使用 if-else 来判断某个条件,并据此决定是否继续循环或进行其他操作。

递归中的 if-else

在递归函数中,if-else 通常用于定义:

  • 递归的结束条件(基本情况):何时停止递归。
  • 递归的步骤(递归情况):如何递归地调用函数。

例子

假设你有一个递归函数 f,当 n 小于或等于 5 时,函数返回 n 的值;否则,函数递归调用自身,参数为 n-3

int f(int n) {
    if (n <= 5)
        return n;  // 结束条件
    else
        return f(n - 3);  // 递归步骤
}

在这个例子中:

  • 如果 n 小于或等于 5,函数返回 n,递归结束。
  • 如果 n 大于 5,函数递归调用自身,n 减去 3。

递归是否形成循环?可以理解为特殊形式的循环

递归本身并不是“循环”结构,但它实现了重复执行代码的效果。在每次递归调用中,函数都在向一个结束条件逼近,这类似于循环的迭代。

然而,递归是通过函数调用自身来实现的,而循环是在同一函数内重复执行代码块。

递归示例:计算阶乘

递归本身并不是一个循环结构,但它实现了类似循环的行为,即重复执行代码。
递归是函数自我调用的过程,每次调用通常都会使问题规模变小,直到达到一个基本情况(停止条件),这时递归结束。

一个典型的递归例子是计算一个数的阶乘。阶乘函数 factorial(n) 定义为 n! = n * (n-1) * (n-2) * ... * 1。在递归形式中,我们可以将 n! 表达为 n * (n-1)!

#include <stdio.h>

// 递归函数计算阶乘
unsigned long long factorial(int n) {
    if (n <= 1) return 1; // 基本情况:0! = 1 和 1! = 1
    else return n * factorial(n - 1); // 递归步骤
}

int main() {
    int number = 5;
    printf("Factorial of %d is %llu\n", number, factorial(number));
    return 0;
}

在这个例子中:

  • n 为 1 或更小时(基本情况),函数直接返回 1,递归结束。
  • 否则,函数返回 n * factorial(n - 1),即当前数字乘以更小数字的阶乘(递归步骤)。

这个递归过程并不是传统意义上的循环,但它通过函数自我调用来重复执行,每次递归都会使问题规模减小。

递归与循环的区别

虽然递归和循环都用于重复执行代码,但它们的机制不同:

  • 循环:在同一个函数内部重复执行一段代码,直到满足某个条件。
  • 递归:函数调用自身,每次调用都在尝试解决更小的问题,直到达到基本情况。

递归可以看作是一种特殊形式的循环,但它通过函数自我调用而不是代码块的重复来实现重复行为。
递归通常用于问题可以自然分解为相似子问题的情况,特别是在问题的结构是自然递归的(如树结构)时。

结论

  • 递归和循环都用于重复执行代码,但它们的实现方式和适用场景不同。
  • if-else 可以在循环和递归中使用,用于基于条件控制流程。
  • 递归函数通过 if-else 定义递归的结束条件和递归步骤,而循环通常使用 if-else 来在每次迭代中根据条件执行不同的代码。

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

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

相关文章

2012-12-12 下载ndk编译出so和可执行文件,放到android 真机运行,包含源码。

一、下载ndk链接NDK 下载 | Android NDK | Android Developers 二、解压ndk后得到下面的文件&#xff0c;里面包含ndk-build.cmd&#xff0c;这个是用来编译的。 三、Android.mk和C源码。完整源码下载路径https://download.csdn.net/download/qq_37858386/88622702 3.1 A…

SD-WAN是怎样实现SaaS性能优化的?

在数字化时代&#xff0c;SaaS应用已经成为许多企业不可或缺的核心业务工具。为实现高效的SaaS应用和卓越的用户体验&#xff0c;企业可考虑采用SD-WAN技术。通过就近访问、智能带宽管理、多路径冗余、高级安全和简化的管理监控&#xff0c;SD-WAN为企业带来显著价值。 1. 就近…

单域名https证书怎么申请

单域名https证书可以保护www和两个域名记录&#xff0c;如果保护的域名是子域名时&#xff0c;只能保护一个子域名。单域名https证书能够为网站提供加密的HTTPS连接&#xff0c;保护网站的数据安全。今天随SSL盾小编了解单域名https证书的申请。 1. 确定证书类型&#xff1a;根…

python自动下载网页中的文件,python 自动下载脚本

本篇文章给大家谈谈python自动下载文件 下载的不完整&#xff0c;以及python登录网站自动下载文件&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 问题描述 Python自动下载文件&#xff0c;通用文件&#xff0c;包括但不限于压缩文件、图片等。 解决方法 一般…

隐语开源|周爱辉:隐语 TEE 技术解读与跨域管控实践

“隐语”是开源的可信隐私计算框架&#xff0c;内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择&#xff0c;提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 11月25日&#xff0c;「隐语开源社区 Meetup西安站」顺利举办&…

【动态规划】03斐波那契数列模型_最小花费爬楼梯_C++(easy1)

题目链接&#xff1a;leetcode使用最小花费爬楼梯 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求达到楼梯顶部的最低花费. 由题可得&#xff1a; cost[i] 是从楼梯第 i 个…

【EMQX】通过EMQX webhook实现转发消息到Python web服务器

EMQX webhook消息转发Web服务器 一、前言二、实现1、EMQX服务器搭建EMQX下载、安装、启动 2、本地Web服务搭建创建Flask项目代码 3、EMQX中创建webhook数据桥接4、EMQX中创建数据转发规则 三、效果 一、前言 需求&#xff1a;获取设备通过mqtt协议发送过来的数据并将数据保存到…

【sqli靶场】第四关和第五关通关思路

目录 前言 一、sqli靶场第四关 1.1 判断注入类型 1.2 观察报错 1.3 判断数据表中的列数 1.4 使用union联合查询 1.5 使用group_concat()函数 二、sqli靶场第五关 2.1 判断注入类型 2.2 使用extractvalue函数报错 2.3 爆出数据库中的表名 2.4 爆出users表中的列名 2.5 爆出use…

异地现场工控设备,如何实现远程配置、调试?

南京某企业专注于工业物联领域&#xff0c;在相关项目中往往会在各个点位部署基于Linux系统的中控主机&#xff0c;实现各类物联设备信息的采集、汇总。但是&#xff0c;由于各点位分散多地&#xff0c;且数量达到了上百个&#xff0c;虽然中控主机具备4G物联网接入能力&#x…

Java设计模式-单例(Singleton)设计模式的概述及实现

目录 &#x1f436;1 设计模式概述 &#x1f436;2 何为单例模式 &#x1f436;3 实现思路 &#x1f436;4 饿汉式实现代码 &#x1f436;5 懒汉式实现代码 &#x1f436;6 对比两种模式&#xff08;特点、优缺点&#xff09; &#x1f436;7 单例模式的优点及应用场景 &…

系统提示:comres.dll丢失怎么办,comres.dll丢失的解决方法

comres.dll是Windows操作系统中一个非常重要的动态链接库文件&#xff0c;它负责提供一些重要的功能和资源。当这个文件丢失或损坏时&#xff0c;可能会导致一系列的问题和影响。本文将介绍comres.dll文件丢失对电脑的影响以及comres.dll丢失的原因&#xff0c;并提供5个解决方…

数据科学工作的20个Pandas函数(备忘)

Pandas 是数据科学社区中使用最广泛的库之一&#xff0c;它是一个强大的工具&#xff0c;可以进行数据操作、清理和分析。 本文将提供最常用的 Pandas 函数以及如何实际使用它们的样例。我们将涵盖从基本数据操作到高级数据分析技术的所有内容&#xff0c;到本文结束时&#xf…

Fnac、Darty跨境利用利用自养号测评补单提升销量和排名

Fnac是法国最有名字的零售商之一&#xff0c;成立于1954年&#xff0c;也是欧洲增长最快的平台之一&#xff0c;2016年&#xff0c;Fnac并购Darty&#xff0c;同时在自己的网站上添加了Darty板块&#xff0c;FnacDarty集团正式成立 国内的产品在Fnac&#xff0c;Darty平台上还…

使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面xsync

目录 1&#xff0c;功能2&#xff0c;注意点3&#xff0c;shell脚本介绍4&#xff0c;bash内容 1&#xff0c;功能 使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面。 2&#xff0c;注意点 需要修改的地方&#xff1a;hadoop250 hadoop251 hadoop252 hadoop253 hado…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(1.结构与源码概述)

在文章【Redis】不卡壳的 Redis 学习之路&#xff1a;从十大数据类型开始入手中我们介绍了Redis常用的10大数据类型&#xff0c;这10大数据类型可并不是直接在底层通过代码实现的&#xff0c;而是通过不同的底层数据结构组合起来的&#xff0c;这篇我们介绍下Redis常用数据类型…

多域名和通配符SSL证书的区别

域名SSL证书和通配符SSL证书都是SSL数字证书中用一张证书保护多个域名站点的证书产品&#xff0c;这两种类型的SSL数字证书各自有各自的特色&#xff0c;今天就随SSL盾小编了解多域名SSL证书和通配符SSL证书的区别。 1.保护的域名类型不同&#xff1a;多域名SSL证书默认保护3-…

从视频中提取图片,轻松制作专属视频封面

你是否曾经为如何制作一个吸引人的视频封面而烦恼&#xff1f;现在&#xff0c;我们将向你展示如何从视频中提取图片&#xff0c;并轻松制作专属的视频封面。无论你是视频编辑新手&#xff0c;还是经验丰富的专业人士&#xff0c;这个技巧都能够帮助你快速提升你的视频品质。 …

外包干了3年,技术退步太明显了。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了差不多3年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能…

4fiddler抓包工具的使用

一、定义 1.1 抓包的定义 说明&#xff1a;客户端向服务器发送请求以及服务器响应客户端的请求&#xff0c;都是以数据包来传递的。 抓包(packet capture)&#xff1a;通过工具拦截客户端与服务器交互的数据包 1.2 fiddler的介绍 Fiddler是一个http协议调试代理工具&#…

黄油市场调研:预计2028年将达到717亿美元

黄油富含矿物质和维生素&#xff0c;奶油主要为脂肪和蛋白质组成&#xff0c;黄油主要用于涂抹面包和煎牛排等&#xff0c;随着西餐认可度提升&#xff0c;国内需求持续上行。黄油营养成分为乳制品之首&#xff0c;脂肪含量更高。 黄油主要用于涂抹面包和煎牛排等&#xff0c;随…