问题:以上代码的输出结果是?
答案:
解析:
数组a:sizeof(a) / sizeof(1) = 8 * 4 / 4 = 8;
接着在给 l 赋值时递归调用function2函数,即 function2(a,0,8) -> function2(a,0,4) -> function2(a,0,2) -> function2(a,0,1)
执行function(a,0,1)时,e - b <= 1成立,执行"return abs(a[b] - a[e]) >= 3 ? a[b] : a[e];" 即return 10,此时l = 10,返回到function2(a,0,2)里继续往下执行,l % 2 == 0成立,r = function2(a,2,2),由于function2(a,2,2)中 e - b <= 1成立,return abs(a[2] - a[2]) >= 3 ? a[2] : a[2]即return 8,此时r = 8;接着判断 l | r 即 10 | 8 即 1010 | 1000 = 1010 即return 10,此时l = 10,返回到function2(a,0,4)中继续往下执行,l % 2 == 0成立,r = function2(a,3,4)(return abs(a[3] - a[4]) >= 3 ? a[3] : a[4]即return 5),此时r = 5;接着判断 10 | 5即 1010 | 0101 = 1111即return 15,此时l = 15,返回function2(a,0,8)中继续往下执行,l % 2 == 0不成立,return l 即返回15,最终结果为15.
数组b:sizeof(b) / sizeof(1) = 8 * 4 / 4 = 8;
function2(a,0,8)-->function2(a,0,4)-->function2(a,0,2)-->function2(a,0,1);
function2(a,0,1):return abs(a[0]-a[1])>=3?a[0]:a[1]即return 5(此时l=5),返回到function2(a,0,2)里继续往下执行;
l%2==0不成立,return l(返回5,此时l=5),返回到function2(a,0,4)里继续往下执行;
l%2==0不成立,return l(返回5,此时l=5),返回到function2(a,0,8)里继续往下执行;
l%2==0不成立,return l(返回5),即最终结果为5.