0
点赞
收藏
分享

微信扫一扫

C语言函数递归 --- 复习题(1)

一.单选题:

1.下列选项关于递归说法错误的是()

A. 存在限制条件,当满足限制条件时,递归停止

B. 每次递归调用后越来越接近递归的条件

C. 递归可以无限制递归下去

D. 递归层次太深容易出现栈溢出


答案:C,这题错误的选项显而易见是C,我们之前将递归的时候就说过递归的两个要求,第一个是需要有限制条件,二是每次递归执行完成后需要更加接近递归的条件,我们之前写过一段代码:

#include<stdio.h>
int main(void)
{
main();
return 0;
}

这段代码会无限递归下去,直到栈区溢出,这就是因为递归的层次过深,且没有有效地限制条件所导致的

2.观察以下代码,算出若调用函数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,我们如果对递归不是很熟悉那就可以采用画图的形式,如图所示:

C语言函数递归 --- 复习题(1)_递归

第一次将2传入Fun()函数中,这时候n=2所以执行的是else语句会返回2*Fun(3),这时候递归就开始了,将3传入Fun()函数中,3≠5,再次执行else语句中的内容,这时候n=3,所以返回值为 2*Fun(4),将4传入Fun()函数中4≠5,再次执行else语句,直到n=5,满足if语句中的内容,返回2,所以最后得到的结果为16,故选D

举报

相关推荐

0 条评论