第38练 第7章 函数的递归调用《C语言程序设计》(电子工业出版社)一课一练

| 2份
| 7页
| 41人阅读
| 0人下载

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(电子工业出版社)一课一练的第7章的第38练,内容涵盖第7章函数的7.7 函数的递归调用。 《C语言程序设计》(电子工业出版社)一课一练 第38练 第7章 函数 7.7 函数的递归调用 1、 单项选择题(本题共4小题) 1、关于函数递归调用的描述,正确的是( ) A. 递归调用是指一个函数调用另一个不同的函数 B. 递归函数必须包含终止条件,否则会出现无限递归 C. 递归调用的执行效率比递推法更高 D. 所有问题都适合用递归方式解决 2、递归函数的核心组成部分是( ) A. 函数体中的循环语句 B. 大量的变量定义 C. 多个不同的函数调用 D. 终止条件和自身调用语句 3、下列关于递归与递推的说法,错误的是( ) A. 递推是从初始条件出发,逐步计算出结果 B. 递归是从问题的最终状态出发,逐步分解到初始条件 C. 汉诺塔问题只能用递归算法实现,无法用递推完成 D. 递归的代码结构通常比递推更简洁 4、汉诺塔问题中,将 n(n≥2)个圆盘从 A 针移动到 C 针,递归分解的第一步是( ) A. 将 A 针上的 1 个圆盘直接移动到 C 针 B. 将 A 针上的 n-1 个圆盘借助 C 针移动到 B 针 C. 将 B 针上的 n-1 个圆盘借助 A 针移动到 C 针 D. 将 A 针上的 n 个圆盘直接移动到 C 针 2、 判断题(本题共3题) 1、递归函数可以没有终止条件,程序运行时会自动停止递归调用。( ) 2、递归调用的执行过程是 "先递推分解到终止条件,再逐层返回计算结果"。( ) 3、使用递归解决问题时,代码结构通常比递推法更简洁易懂。( ) 3、 填空题(本题共2题) 1、函数递归调用必须满足的两个必要条件是:____和____。 2、汉诺塔问题中,当 n≥2 时,将 n 个圆盘从 A 针移动到 C 针的第三个核心步骤是:____。 4、 读程序写结果题(本题共1题) 1、阅读下面的 C 语言程序,写出程序运行后的输出结果。 【程序代码】 #include <stdio.h> int fact(int n) { // 递归终止条件:n=1时返回1 if(n == 1) return 1; // 递归调用自身,分解问题 else return fact(n-1) * n; } int main() { int res = fact(4); printf("4的阶乘结果是:%d", res); return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(电子工业出版社)一课一练的第7章的第38练,内容涵盖第7章函数的7.7 函数的递归调用。 《C语言程序设计》(电子工业出版社)一课一练 第38练 第7章 函数 7.7 函数的递归调用 1、 单项选择题(本题共4小题) 1、关于函数递归调用的描述,正确的是( ) A. 递归调用是指一个函数调用另一个不同的函数 B. 递归函数必须包含终止条件,否则会出现无限递归 C. 递归调用的执行效率比递推法更高 D. 所有问题都适合用递归方式解决 【答案】B 【解析】递归调用是函数自身调用自身,选项 A 错误;递归需要额外的栈空间,执行效率通常低于递推,选项 C 错误;并非所有问题都适合递归,比如简单的求和问题用递推更直观,选项 D 错误;递归必须有终止条件,否则会导致栈溢出,选项 B 正确。 2、递归函数的核心组成部分是( ) A. 函数体中的循环语句 B. 大量的变量定义 C. 多个不同的函数调用 D. 终止条件和自身调用语句 【答案】D 【解析】递归的本质是函数自身调用,同时必须有终止条件来结束递归过程,否则会无限调用下去。循环语句、多函数调用都不是递归的核心,因此选项 D 正确。 3、下列关于递归与递推的说法,错误的是( ) A. 递推是从初始条件出发,逐步计算出结果 B. 递归是从问题的最终状态出发,逐步分解到初始条件 C. 汉诺塔问题只能用递归算法实现,无法用递推完成 D. 递归的代码结构通常比递推更简洁 【答案】C 【解析】汉诺塔问题用递归实现更直观简洁,但也可以通过递推或迭代的方式实现,只是逻辑复杂度更高,并非只能用递归,选项 C 的描述错误。 4、汉诺塔问题中,将 n(n≥2)个圆盘从 A 针移动到 C 针,递归分解的第一步是( ) A. 将 A 针上的 1 个圆盘直接移动到 C 针 B. 将 A 针上的 n-1 个圆盘借助 C 针移动到 B 针 C. 将 B 针上的 n-1 个圆盘借助 A 针移动到 C 针 D. 将 A 针上的 n 个圆盘直接移动到 C 针 【答案】B 【解析】汉诺塔的递归分解逻辑为:第一步把 A 上的 n-1 个圆盘移到 B(借助 C),第二步把 A 上剩余的 1 个圆盘移到 C,第三步把 B 上的 n-1 个圆盘移到 C(借助 A),因此选项 B 正确。 2、 判断题(本题共3题) 1、递归函数可以没有终止条件,程序运行时会自动停止递归调用。( ) 【答案】× 【解析】如果递归函数没有终止条件,会不断调用自身,导致栈内存溢出,程序崩溃,无法自动停止,因此该表述错误。 2、递归调用的执行过程是 "先递推分解到终止条件,再逐层返回计算结果"。( ) 【答案】√ 【解析】递归的执行分为递推和回溯两个阶段:递推阶段不断分解问题直到触发终止条件,回溯阶段从终止条件开始,逐层返回计算每一层的结果,该表述符合递归的执行逻辑。 3、使用递归解决问题时,代码结构通常比递推法更简洁易懂。( ) 【答案】√ 【解析】对于汉诺塔、阶乘等具有重复子问题的场景,递归可以用少量代码描述问题的分解逻辑,比递推法的循环结构更直观简洁,因此该表述正确。 3、 填空题(本题共2题) 1、函数递归调用必须满足的两个必要条件是:____和____。 【答案】有明确的终止条件;函数自身调用自身 【解析】终止条件用于结束递归过程,避免无限调用;自身调用是递归的核心特征,通过分解问题实现复杂功能,两者缺一不可。只有同时满足这两个条件,递归才能正常执行并得到正确结果。 2、汉诺塔问题中,当 n≥2 时,将 n 个圆盘从 A 针移动到 C 针的第三个核心步骤是:____。 【答案】把 B 针上的 n-1 个圆盘借助 A 针移动到 C 针 【解析】这是汉诺塔递归分解的最后一步,与第一步的逻辑类同,完成剩余圆盘的移动,最终实现所有圆盘从 A 到 C 的转移,符合汉诺塔的规则要求。 4、 读程序写结果题(本题共1题) 1、阅读下面的 C 语言程序,写出程序运行后的输出结果。 【程序代码】 #include <stdio.h> int fact(int n) { // 递归终止条件:n=1时返回1 if(n == 1) return 1; // 递归调用自身,分解问题 else return fact(n-1) * n; } int main() { int res = fact(4); printf("4的阶乘结果是:%d", res); return 0; } 【答案】 程序运行结果: 4 的阶乘结果是:24 【解析】 调用fact(4)时,先递归调用fact(3)→fact(2)→fact(1),fact(1)触发终止条件返回 1;随后回溯计算:fact(2)=1*2=2,fact(3)=2*3=6,fact(4)=6*4=24,最终主函数输出结果 24。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第38练 第7章 函数的递归调用《C语言程序设计》(电子工业出版社)一课一练-第1页
1

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。