函数的递归调用

        在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归(recursive)调用。C和C++允许函数的递归调用。例如:
        int f(int x)
        { int y,z;
          z=f(y);                //在调用函数 f 的过程中,又要调用 f 函数
          return (2*z);
        }
        以上是直接调用本函数。

        可以看出,这种递归调用是无终止的自身调用。显然,程序中不应出现这种无终止的递归调用,而只应出现有限次数的、有终止的递归调用,这可以用 if 语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不再继续。
        包含递归调用的函数称为递归函数。关于递归的概念,有些读者可能感到不好理解,下面用一个日常生活中的例子来说明。
         有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁。问第4个人岁数,他说比第3个人大两岁。问第3个人,又说比第2个人大两岁。问第2个人,说比第1个人大两岁。最后问第1个人,他说是10岁。请问第5个人多少岁?

解题思路:

        显然,这是一个递归问题。要求第5个人的年龄,就必须先知道第4个人的年龄,而第4个人的年龄也不知道。要求第4个人的年龄必须先知道第3个人的年龄,而第3个人的年龄又取决于第2个人的年龄,第2个人的年龄取决于第1个人的年龄。而且每个人都比其前一个人大两岁,即
        age(5)=age(4)+2
        age(4)=age(3)+2
        age(3)=age(2)+2
        age(2)=age(1)+2
        age(1)=10
可以用函数表述如下:
        age(n)=10                       (n=1)
        age(n)=age(n-1)+2        (n>1)

        可以看到,当n>1时,求第n个人的年龄的公式是相同的。

        求解可分成两个阶段:第1阶段是回溯,即将第n个人的年龄表示为第(n-1)个人年龄的函数,而第(n-1)个人的年龄仍然不知道,还要回溯到第(n-2)个人的年龄……直到第1个人的年龄。此时age(1)已知,不必再向前推了。然后开始第2阶段,采用递推方法,从第1个人的已知年龄推算出第2个人的年龄(12岁),从第2个人的年龄推算出第3个人的年龄(14)……一直推算出第5个人的年龄(18岁)为止。也就是说,一个递归的问题可以分为回溯和递推两个阶段。要经历许多步才能求出最后的值。显而易见,如果要求递归过程不是无限制进行下去,必须具有一个结束递归过程的条件。例如 age(1)= 10,就是使递归结束的条件。

编写程序:

运行结果:

程序分析:

        用一个age函数来实现递归过程。main函数中除了return语句外,只有一个cout语句。整个问题的求解全靠一个函数调用"age(5)"来解决。age函数共被调用5次,即age(5),age(4),age(3),age(2),age(1)。其中,age(5)是main函数调用的,其余4次是在age函数中调用的,即递归调用4次。请读者仔细分析调用的过程。应当强调说明的是:在某一次调用age函数时并不是立即得到age(n)的值,而是一次又一次地进行递归调用,到age(1)时才有确定的值,然后再递推出age(2),age(3),age(4),age(5)。

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

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

相关文章

云服务器修改端口通常涉及几个步骤

云服务器修改端口通常涉及几个步骤 远程连接并登录到Linux云服务器: 使用SSH工具(如PuTTY、SecureCRT等)远程连接到云服务器。 输入云服务器的IP地址、用户名和密码(或密钥)进行登录。 修改SSH配置文件&#xff1a…

Jmeter使用While控制器

1.前言 对于性能测试场景中,需要用”执行某个事物,直到一个条件停止“的概念时,While控制器控制器无疑是首选,但是在编写脚本时,经常会出现推出循环异常,获取参数异常等问题,下面总结两种常用的…

如何将Excel表格中的图片链接直接显示成图片?

在 Excel 中,你可以通过以下步骤将图片链接转换为直接显示图片: 1. **插入图片链接**:首先,在 Excel 表格中插入图片的链接。你可以在某个单元格中输入图片的链接地址,或者使用 Excel 的“插入图片”功能插入链接。 2.…

从新手到高手,教你如何改造你的广告思维方式!

想要广告震撼人心又让人长时间记住?答案肯定是“创意”二字。广告创意,说白了就是脑洞大开,想法新颖。那些很流行的广告,都是因为背后的想法特别、新颖。做广告啊,就得不停地思考,创新思维是关键。 广告思…

天锐绿盾 | 如何防止电脑内文件遭到泄露?

天锐绿盾是一款专为企业设计的数据防泄漏软件系统,它通过一系列综合性的安全措施来有效防止电脑内文件遭到泄露。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天锐绿盾防止文件泄露的主要功能和方法&a…

【CSP CCF记录】202009-1 称检测点查询

题目 过程 难点&#xff1a;编号和位置的一一对应&#xff0c;不同位置的距离可能相等。 所以使用一个结构体记录不同检测点的编号和到居民地的距离。 sort函数进行排序。Sort函数使用方法 参考&#xff1a;http://t.csdnimg.cn/Y0Hpi 代码 #include <bits/stdc.h>…

人工智能AI聊天chatgpt系统openai对话创作文言一心源码APP小程序功能介绍

你提到的是一个集成了多种智能AI创作能力的系统&#xff0c;它结合了OpenAI的ChatGPT、百度的文言一心&#xff08;ERNIE Bot&#xff09;以及可能的微信WeLM&#xff08;或其他类似接口&#xff09;等。这样的系统确实能够极大地提高创作效率&#xff0c;并且在各种场景下为用…

Rust Web开发框架actix-web入门案例

概述 在看书的时候&#xff0c;用到了actix-web这个框架的案例。 书里面的版本是1.0&#xff0c;但是我看官网最新都4.4了。 为了抹平这种信息差&#xff0c;所以我决定把官方提供的示例代码过一遍。 核心代码 Cargo.toml [package] name "hello" version &q…

随笔:贝特弹琴

半年前&#xff0c;我买了一架朗朗代言的智能电子琴。所谓智能是指&#xff0c;它配套的手机软件知道你在按哪个键&#xff0c;它还能让任意按键发光。用专业术语说&#xff0c;它的键盘具有输入和输出功能&#xff0c;和软件组合起来是一个完整的计算机系统。 随着软件练习曲…

使用Postman来调用Salesforce Bulk API 2.0的方法

简介 Bulk API 2.0 可以支持大量数据增删改查&#xff0c; 用新版的Dataloader也可以进行访问&#xff0c;但Dataloader会把CSV里的数据先转成Bean对象&#xff0c;这样会耗费大量的时间&#xff0c;而且数据量过大会卡死&#xff0c;所以直接上传CSV会节省大量时间和避免卡死风…

关于电源1

电源的定义 广义定义&#xff1a;电源是将其它形式的能转换成电能的装置。 例如&#xff1a;发电机&#xff1a;将热能、水能、风能、核能、光照、震动等转化为电能的装置。 电池&#xff1a;将化学能转换为电能。 狭义定义&#xf…

每天认识新职业——程序员

一、程序员是什么 程序员是从事程序开发、程序维护的基层工作人员。一般将程序员分为程序设计人员和程序编码人员&#xff0c;但两者的界限并不非常清楚。随着互联网的不断普及&#xff0c;网络上把男程序员称作“程序猿"&#xff0c;女程序员称作“程序媛"。或统称…

Java进阶11 IO流、功能流

Java进阶11 IO流-功能流 一、字符缓冲流 字符缓冲流在源代码中内置了字符数组&#xff0c;可以提高读写效率 1、构造方法 方法说明BufferedReader(new FileReader(文件路径))对传入的字符输入流进行包装BufferedWriter(new FileWriter(文件路径))对传入的字符输出流进行包装…

电子商务电商数据采集接口||电子商务市场数据采集方法,你学到了吗?

小刘从某职业院校电子商务专业毕业后&#xff0c;-直在某品牌电商部负责运营工作&#xff0c;近期&#xff0c;同班同学小王邀请小刘加入创业大军&#xff0c;共同开设网店&#xff0c;销售家乡的螃蟹、鲜虾、扇贝等生鲜水产。 运营经验丰富的小刘决定&#xff0c;在创业开始前…

IT工具集项目

网址 https://github.com/CorentinTh/it-tools?tabreadme-ov-file 类似的项目应该有很多&#xff0c;提供各种it人员的小工具

SDN 实现 vxlan隧道

SDN vxlan隧道 官方介绍&#xff1a; VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff0c;虚拟扩展局域网&#xff09;&#xff0c;是由IETF定义的NVO3&#xff08;Network Virtualization over Layer 3&#xff09;标准技术之一&#xff0c;是对传统VLAN协议…

中途离开项羽投奔刘邦的那些名将谋臣,最后的结果怎么样?

刘邦夺取天下后&#xff0c;说&#xff1a;我自己没什么能力&#xff0c;之所以击败项羽&#xff0c;都是大家的功劳。带兵横扫强敌&#xff0c;我不如韩信&#xff1b;筹措粮草物资&#xff0c;源远不断地给前线供应粮饷&#xff0c;我不如萧何&#xff1b;坐在帐中&#xff0…

地平线旭日X3开发板编译USB网卡驱动 AX88772B

由于使用的激光雷达是网口输出的&#xff0c; 为了不占用X3派已有的网口&#xff0c;接上去了一个绿联的usb网卡&#xff0c; 发现系统没有驱动&#xff0c;所以动手看看能不能自己编译一个 首先lsusb查看一下网卡型号 发现型号是AX88772B&#xff0c;去官网看了一下&#x…

记录用python跑csdn点赞接口

代码如下 # 导入request包 import requests # 请求URL URL3https://blog.csdn.net//phoenix/web/v1/article/like # 入参 data3{articleId:109552419} # 请求头 headers3{cookie:uuid_tt_dd10_30308678820-1713771851124-190368; loginbox_strategy%7B%22taskId%22%3A349%2C%2…