从程序执行的流程角度,返回即是“被调用函数执行结束后,返回至调用这个函数的位置,接着完成其他任务。”。这句话绕一些,看一些具体的例子。
[cpp]
//例1
#include
using namespace std;
int max(int x, int y);
int main()
{
int a,b,c;
a=30;
b=20;
c=max(a,b);
cout<<"大者为: "<
“返回”,也就是C++中的return,词典中的释义是“回到一个地方或状况或从一个地方或状况回来的行动”。用现实生活中的例子也可以解释。例如:
return 0;
}
int max(int x, int y)
{
int z;
if(x>y)
z=x;
else
z=y;
return z;
}
在第9行调用max(a, b)时,函数会到第14行开始定义的max函数中执行。执行至21行return z时,函数返回至第9行(即“返回至调用这个函数的位置”),将返回值赋值给变量c(即“接着完成其他任务”,此处是为c赋值。)
建议初学者在
破解这个难关时,利用IDE中提供的单步执行工具实际“走”一遍看看。具体步骤如图1至图4。
“返回”,也就是C++中的return,词典中的释义是“回到一个地方或状况或从一个地方或状况回来的行动”。用现实生活中的例子也可以解释。例如:
某一天,我要修理一下家里漏水的水龙头。关总阀,拆龙头,修理均顺利完成,却发现后续的安装无法进行,家里储备的密封胶条没有了,于是吩咐老婆,出去买胶条去。老婆下楼后准备骑自行车去,却发现车胎没气了,于是喊过来正在楼下玩的儿子:“帮娘回家取气筒去。”儿子回家一趟,返回给他的娘一支气筒。于是老婆给自行车打了气,去市场一趟,给我返回了密封胶条,我得以把余下的安装、开阀门,清理现场等工作干完。
图5说明了这样一个调用、返回的过程。
函数的递归是函数“自己调用自己”的过程,这让不少还觉得了解了“返回”含义的同学又遇到了障碍。写过一个助学文档《读懂C++递归程序》,演示的就是这样一个调用和返回的过程。
以下面以求阶乘的递归函数为例来说明相关问题。
[cpp]
//例2
#include
using namespace std;
long fact(int);
int main( )
{
int n;
long y;
n=5;
y=fact(n);
cout<
return 0;
}
long fact(int n)
{
long f;
if (n==1)
f=1;
else
f=fact(n-1)*n;
return f;
}
实际上,递归函数返回的意义仍旧。递归中的每一次调用自身,参数并不一样。在main函数中第9行执行到y=fact(n)时,调用的是fact(5);执行fact(5)时,需要调用fact(4),依此一直要调用到fact(1),从而不再递归调用直接得到求解的结果。调用一级一级就是这样下来的,返回则是逆着这个顺序展开,fact(1)的返回值1,返回给fact(2)用于计算fact(1)*2,fact(2)的返回值2,返回给fact(3)用于计算fact(2)*3,依此一直返回到fact(5),求出值后递归结束,fact(5)的return语句返回到main函数中,最终完成了任务。这个过程如图6所示。
对于递归函数中返回的理解,建议也利用单步执行的方式进行一次跟踪,从而增加直观的映像。图7至图13展示了这个过程中的几处关键。
再次建议,将调试工具用好,这是学习程序设计过程中必备的技能。