C 函数递归

目录

什么是递归

递归的限制条件

递归的例子

1、用递归求n的阶乘

递归扩展学习

1、青蛙跳台阶

思路

代码实现 

2、汉诺塔问题​

思路

代码实现

总结


什么是递归

递归:“递推” + “回归”

在C语言中,函数递归就是:函数自己调用自己

将一件事情 “大事化小”,完成这些小事所用的方法都是相同的,只是参数不一样。


递归的限制条件

  1. 递归存在限制条件,当满足这个限制条件的时候,递归便不再继续。
  2. 每次递归调用之后越来越接近这个限制条件。

递归的例子

1、用递归求n的阶乘

//VS2022 x64    
#include<stdio.h>
int Fact(int n)    //实现阶乘的函数
{if (n == 0)       //限制条件return 1;elsereturn n * Fact(n - 1);    //递归    
}int main()
{int n = 0;scanf("%d", &n);int ret = Fact(n);       printf("%d\n", ret);        return 0;
}


递归扩展学习

1、青蛙跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

思路

 可以发现发现,跳到第n个台阶,最后一步,只有两种方法:

  • 从 第 n-1 个 楼梯跳上一级台阶;
  • 从 第 n-2 个 楼梯跳上两级台阶;

代码实现 

#include<stdio.h>
int Jump(int n)
{if (n == 1)return 1;else if (n == 2)return 2;elsereturn Jump(n - 1) + Jump(n - 2);
}int main()
{int n = 0;scanf("%d", &n);int sum = Jump(n);printf("小青蛙有 %d 种跳法到第 %d 台阶", sum, n);return 0;
}

2、汉诺塔问题​

给定三根柱子,记为 A,B,C,其中 A 柱子上有 n 个盘子,从上到下编号为 0 到 n−1 ,且上面的盘子一定比下面的盘子小。问:将 A 柱上的盘子经由 B 柱移动到 C 柱最少需要多少次?打印出每个步骤

移动时应注意:

  1. 一次只能移动一个盘子
  2. ​ 大的盘子不能压在小盘子上

思路

先从简单的三个盘子试试,可以先不看答案自己画一画,挺好玩的,注意规则噢

(1)n个盘子从A柱到C柱最少移动次数

 (2)打印出每个步骤

代码实现

#include<stdio.h>
void Move(char pos1, char pos2)		//打印步骤
{printf(" %c->%c ", pos1, pos2);
}//pos1 起点
//pos2 中转站
//pos3 目的地
void Hannoi(int n, char pos1, char pos2, char pos3)
{if (n == 1)Move(pos1, pos3);	else{Hannoi(n - 1, pos1, pos3, pos2);	//n-1个盘子借助 pow3 从 pow1->pow2Move(pos1, pos3);					//第n个盘子从 pos1 -> pos3Hannoi(n - 1, pos2, pos1, pos3);	//n-1个盘子借助 pos1 从 pos2->pos3}
}int main()
{int n = 0;	//需要移动的盘子数量scanf("%d", &n);Hannoi(n, 'A', 'B', 'C');return 0;
}


总结

函数递归对于我这种初学者比较困难,一直在思考怎么才能把递归讲的通俗易懂,很显然,目前的我还很难做到, 对于青蛙跳台阶、特别是汉诺塔问题,我还很难熟练掌握其思想。虽然现在不太行,但我相信在日后的不断学习,绝对能够把这些知识稳稳收入囊中为我所用,所以各位也不必着急,相信自己,一定可以!


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

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

相关文章

使用 Flutter 打造引人入胜的休闲游戏体验

作者 / Zoey Fan 去年&#xff0c;Flutter 休闲游戏工具包进行了一次重大更新。近期在旧金山举办的游戏开发者大会 (GDC) 上&#xff0c;Flutter 首次亮相。GDC 是游戏行业的顶级专业盛会&#xff0c;致力于帮助游戏开发者不断提升开发技能。欢迎您继续阅读&#xff0c;了解开发…

Python写个二维码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、进入官网下载二、下载一下三.输入代码 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、进入官网下载 官网 pip insta…

FSRCNN:加速超分辨率卷积神经网络,SRCNN的加速版

paper&#xff1a;https://arxiv.org/pdf/1608.00367 code: https://github.com/yjn870/FSRCNN-pytorch/tree/master 目录 1. 动机 2. 方法 3. 代码对比 4. 实验结果 1. 动机 作者此前提出的SRCNN证明了CNN在图像超分领域的有效性。然而&#xff0c;SRCNN计算效率较低&#…

算法刷题day46

目录 引言一、树的重心二、毕业旅行问题三、高精度乘法 引言 今天复习了一下高精度的所有模板&#xff0c;包括加法、减法、乘法、除法&#xff0c;因为自己当时在蓝桥杯的时候没有看出来那个题使用高精度&#xff0c;因为对于一个数的大小和一个数的长度&#xff0c;自己有时…

深入探究音视频开源库WebRTC中NetEQ音频抗网络延时与抗丢包的实现机制

目录 1、引言 2、WebRTC简介 3、什么是NetEQ&#xff1f; 4、NetEQ技术详解 4.1、NetEQ概述 4.2、抖动消除技术 4.3、丢包补偿技术 4.4、NetEQ概要设计 4.5、NetEQ的命令机制 4.6、NetEQ的播放机制 4.7、MCU的控制机制 4.8、DSP的算法处理 4.9、DSP算法的模拟测试…

安卓玩机工具推荐----MTK芯片 简单制作线刷包 备份分区 备份基带 去除锁类 推荐工具操作解析

工具说明 在前面几期mtk芯片类玩机工具中解析过如何无官方固件从手机抽包 制作线刷包的步骤&#xff0c;类似的工具与操作有很多种。演示的只是本人片面的理解与一些步骤解析。mtk芯片机型抽包关键点在于..mt*****txt的分区地址段引导和 perloader临时分区引导。前面几期都是需…

网络中的基本概念

IP地址 概念&#xff1a; IP地址主要用于标识网络主机&#xff0c;其他网络设备的网络地址。简单来说&#xff1a;IP地址就是用于定位主机的网络地址。 如&#xff1a;送快递的快递员要知道收货地址&#xff0c;这里的收货地址就相当于IP地址。格式&#xff1a; IP地址是⼀个3…

matlab绘图之在曲线上加竖直线

matlab绘图之在曲线上加竖直线 clear clc close all x0:1:20; yxlsread(compare.xlsx,A1:A18); plot(y,b) grid on; hhaxis; hold on; plot([10,10],[hh(3),hh(4)],r--) plot([8,8],[hh(3),hh(4)],k--) plot([2,2],[hh(3),hh(4)],k--) xlabel(它是x轴) ylabel(它是y轴) text(4,…

k-均值聚类

K均值聚类&#xff08;K-means clustering&#xff09;是一种常用的无监督学习方法&#xff0c;用于将一组数据点划分为K个簇&#xff08;cluster&#xff09;。 它的目标是将相似的数据点归到同一个簇中&#xff0c;同时使得不同簇之间的数据点尽可能不相似。K均值聚类算法的…

【漏洞复现】卡车卫星定位系统 /user/create接口处存在未授权密码重置漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

护眼台灯哪个牌子最好?性价比最高的护眼台灯大爆料!

孩子上学后确实需要更多的关注和照顾。眼睛健康尤为重要&#xff0c;尤其是在学习时。选择一个好的护眼灯确实可以减轻眼睛疲劳和近视的风险。护眼台灯哪个牌子最好&#xff1f;目前市面上有比较好用的护眼台灯品牌有书客、飞利浦、松下等&#xff0c;这些品牌大都依靠自身的实…

Web3与物联网:探索区块链如何驱动智能设备的未来

引言 在数字化快速发展的时代&#xff0c;Web3技术和物联网&#xff08;IoT&#xff09;都成为了前沿技术的代表。两者的结合正逐渐展现出无限的可能性&#xff0c;尤其是在智能设备和数据安全方面。本文将深入探讨Web3如何与物联网相结合&#xff0c;以及这种结合对未来智能设…