第三题递归调用这是怎么调用的 最后到底输出什么f(a,9)这是啥?

递归if(n>1)不满足条件直接就else了啊,所以就returna[0]了啊? 到底为什么此题是求出数组a元素的最大值,这个递归调用是怎么调用的?我觉得最后应该是8 ,但是我的想法肯定错我又不知道哪错了

f(a,n)在n>1的情况下返回的是f(a,n-1)和a[n-1]中较大的一个值,那么过程为:
f(a,9)=max(f(a,8), a[8])
f(a,8)=max(f(a,7), a[7])
f(a,7)=max(f(a,6), a[6])
...
f(a,2)=max(f(a,1), a[1])=max(a[0], a[1]) 【因为n=1时,返回值为a[0]】
一层层替换回去可得
f(a,9)=max(a[0], a[1], a[2]... a[8])追问

t=f(a,n-1)
return t也就是
return f(a,n-1)>a[n-1]这个式子怎么判断是0还是非0?
f(a,n)在n>1的情况下返回的是f(a,n-1)和a[n-1]中较大的一个值 我怎么知道哪个大啊?

追答

"f(a,n)在n>1的情况下返回的是f(a,n-1)和a[n-1]中较大的一个值 我怎么知道哪个大啊?"
要知道哪个大,就得求出f(a,n-1)的值
而根据类似的逻辑,会发现为了知道f(a,n-1)返回什么,必须先求得f(a,n-2)的值……
如此递推(递归)下去,直到f(a, 1),他的返回值是确定的,就是a[0],不用再推了。
接下来就要把刚才欠的逻辑链全塞回去,一层层“归”回原本的f(a,n)的位置
你可以在纸上详细画一下这个过程,比如求一下f(a,4),省得f(a,9)层数太多太累,也没必要。

追问

昂 昂 我明白了 谢谢哈

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-03-03
递归是这么调用的:
t=f(a,9)--->f(a,8)--->f(a,7) ... ... 一直到f(a,2)= 9的时候,就不在继续执行if语句了,此时就相当于t=a[2] = 9,然后接着执行t后面的return t > a[1] ? 1 : a[n-1], 然后直接打印a[2]的值。
这里else的语句其实就没有执行。追问

return t>a[n-1]这块怎么判断是0还是非0啊?return t 等于什么啊?t为什么等于a[2]啊?

追答

因为执行到n=2的时候,已经停止了递归调用,此时需要执行else的return部分,
因为函数f的返回值是a[0],而t正是a[0]啊,所以,先进行返回,之后,再执行if里面的返回,
此时return的值是9。
如果实在不能理解,就用程序执行一下,看看变量的变化。

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网