C语言一道递推选择题,求学霸仔细分析下,没怎么看懂?
1个回答
展开全部
这是典型的递归,退出条件是n等于1,
递归的式子是a[0]+fun(a+1,n-1);
递归的一个重要的点就是,不要把fun()里面调用的函数看成fun()本身,要看成另一个函数
如下:fun(a+2,4)->fun1(a+3,3)->fun2(a+4,2)->fun3(a+5,1);根据题目,在fun3(1)被调用时,n为1,不满足条件,返回一个值a[0],也就是a+5,即6,这个1在fun2()里面就return a[0]+6(此处a[0]为a+4,也就是5)加起来11,返回给fun1(),就是11+4,fun就是15+3,所以结果就是18。
递归的式子是a[0]+fun(a+1,n-1);
递归的一个重要的点就是,不要把fun()里面调用的函数看成fun()本身,要看成另一个函数
如下:fun(a+2,4)->fun1(a+3,3)->fun2(a+4,2)->fun3(a+5,1);根据题目,在fun3(1)被调用时,n为1,不满足条件,返回一个值a[0],也就是a+5,即6,这个1在fun2()里面就return a[0]+6(此处a[0]为a+4,也就是5)加起来11,返回给fun1(),就是11+4,fun就是15+3,所以结果就是18。
追问
前面看懂了,就是fun3=a[0]为什么返回的是6呢,从这之后还是没理解,比较笨,望在赐教
追答
fun3()传入的参数是a+5,所以fun3()里面的a其实是数组a的第6个数的指针,这里你需要了解一下数组的名称是一个指针,存储的是数组的第一个数的地址,传入a+5就相当于传入的数组里第6个数字的地址,所以这里的a[]其实是第六个数的地址,这样确实有点绕,需要对指针有所了解,并且对函数的传参有一定的理解。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询