C语言一些小问题,求解答
输出结果怎么是14?在调用函数funs的时候,判断结果为else,执行n+funs(n-1);不是5+(5-1)?...
输出结果怎么是14?
在调用函数funs的时候,判断结果为else,执行n+funs(n-1);
不是5+(5-1)? 展开
在调用函数funs的时候,判断结果为else,执行n+funs(n-1);
不是5+(5-1)? 展开
15个回答
展开全部
在这个题中,fun()函数发生了递归调用,即函数自己调用自己。在满足发生递归的条件时,递归调用是以逐层嵌套的:形式进入,直到递归条件不再满足,再由最内层开始依次逐层退出。递归调用发生的次数由发生递归的条件所决定。本题中 n=5,进入fun(5)后,会继续发生fun(4)、fun(3)调用,然后由内层依次返回,程序运行过程如下:
第1次调用 : n=5,执行5+fun(4)
第2次调用 : n=4,执行4+fun(3)
第3次调用 : n=3,执行3+fun(2)
笫1次返回 : 退出笫3次调用,返回值 3+2=5
第2次返回 : 退出第2次调用,返回值 4+5=9
第3次返回 : 退出第1次调用,返回值 5+9=14
所以主程序输出S=14。
第1次调用 : n=5,执行5+fun(4)
第2次调用 : n=4,执行4+fun(3)
第3次调用 : n=3,执行3+fun(2)
笫1次返回 : 退出笫3次调用,返回值 3+2=5
第2次返回 : 退出第2次调用,返回值 4+5=9
第3次返回 : 退出第1次调用,返回值 5+9=14
所以主程序输出S=14。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果是对的。
首先,funs()定在调用的时候形成了递归,所以算出来的结果就不会是5+5-1。
其次,你的程序的过程可以表达为5+(4+(3+2)),也就是说你在funs()里递归调用了funs()。
在做C语言程序的时候,一定要理清思路,避免不应出现的递归,以免形成死循环,你这个调用如果参数错误,很容易出错。
第三,按你的要求,结果是9的话,正确做法funs()定义return(n-1),main()里调用print(n+funs(n))
首先,funs()定在调用的时候形成了递归,所以算出来的结果就不会是5+5-1。
其次,你的程序的过程可以表达为5+(4+(3+2)),也就是说你在funs()里递归调用了funs()。
在做C语言程序的时候,一定要理清思路,避免不应出现的递归,以免形成死循环,你这个调用如果参数错误,很容易出错。
第三,按你的要求,结果是9的话,正确做法funs()定义return(n-1),main()里调用print(n+funs(n))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是递归,funs函数一直调用自身,就是funs函数中再不断执行funs函数,所以n一直减到2结束调用,结果是5+4+3+2=14
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是递归函数,不是只执行一次,唉,怕你不明白,再解释下吧,就是n=5,funs(n-1)=9,n+funs(n-1)=5+9=14,这回明白没?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询