#Z0320. 函数间的相互调用

函数间的相互调用

No testdata at current.

除了可以在主函数调用其他函数以外,我们还可以在自定义的函数里调用其他函数:

 void output1() { 
   cout << "1" << endl; 
   return; 
 } 
 void output2() { 
   cout << "2" << endl; 
   output1(); 
   return; 
 } 
 void output3() { 
   cout << "3" << endl; 
   output2(); 
   return; 
 } 

在这个程序里,通过调用output3函数,首先输出了一行3,并调用了output2函数;在output2函数里,首先输出了一行2,并调用了output1函数;在output1函数里,输出了一行1。

最终,当我们调用output3函数后,程序会输出如下结果:

32
1

在刚才的例子中,函数之间的调用形如“一条链”:

001.jpg

扩展思考:如果我们要输出从 nn 到 11 这 nn 行整数,应该怎么改前面的程序呢?

在这样的一系列函数间的调用过程里,还可以进行返回值的传递和使用。

int frac1() {
	return 1;
}
int frac2() {
	return frac1() * 2;
}
int frac3() {
	return frac2() * 3;
}
int frac4() {
	return frac3() * 4;
}

当我们调用frac4的时候,实际上是在计算 4!=1×2×3×4。

除了可以传递返回值,还可以传递函数的参数:

void output1(int n) {
	cout << n << endl;
}
void output2(int n) {
	cout << n << endl;
	output1(n - 1);
}
void output3(int n) {
	cout << n << endl;
	output2(n - 1);
}

当我们调用output3(5)的时候,会经历如下的调用过程:

调用output3(5)

输出5

调用output2(4)

输出4

调用output1(3)

输出3

返回output2

返回output1

返回开始的调用处