小米笔试题,假设a=8,b=2012,Recurse()函数的返回值是:
假设a=8,b=2012,Recurse()函数的返回值是:
int Recurse(int a,int b)
{
If(a>=b)
{
If(a==b)
return a;
else
return 0;
}
else
{
return Recurse(a+1,b-1)+a+b;
}
}
答案: a,b会等于(2012+8)/2=1010, 结果1010+(2012+8)*(1010-8)=2025050
能说下解题步骤吗?谢谢
[解决办法]
2012+8 = 2020,根据所给代码,会在a=1010,b=1010的时候返回1010,而Recurse后面+a+b,则会有8+9+...+1009,与1011+1012+...+2012,所以这题最终相当于8+9+...+1010+...+2012,此处1010为递归返回,通项公式计算所得结果为1010*2005=2025050
[解决办法]
这是一个递归调用 首先找到a=b时的中间值,就是1010,返回此时recurse的值1010与此时a,b值相加,依次向前算起:1010(recurse)+1010(a)+1010(b)+1009(a‘)+1011(b’)+……+8+2012.所以得到1010+(2012+8)*(1010-8+1)!