首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小米笔考题,假设a=8,b=2012,Recurse()函数的返回值是

2012-09-24 
小米笔试题,假设a8,b2012,Recurse()函数的返回值是:假设a8,b2012,Recurse()函数的返回值是:int Recurs

小米笔试题,假设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)!

热点排行