一.单选题:
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,我们如果对递归不是很熟悉那就可以采用画图的形式,如图所示:
第一次将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
标签:语句,return,递归,int,复习题,else,---,Fun,C语言 From: https://blog.51cto.com/u_16183773/7413259