递归调用:函数可以直接或者间接调用自身
以一个函数为例
#include<iostream>
using namespace std;
//cal n!
unsigned fac(unsigned n){
unsigned f;
if(n==0)
f=1;
else
f=fac(n-1)*n;
return f ;
}
int main(){
unsigned n;
cout<<"Enter a postive integer: ";
cin>>n;
unsigned y=fac(n);
cout<<n<<"!="<<y<<endl;
return 0;
}
下面是计算机执行过程
//下面是计算机执行代码过程,这里如果输入3计算机将先执行主函数调用fac(3)
unsigned fac(3){
unsigned f;
if(n==0)
f=1;
else
f=fac(2)*3; //这里将继续调用fac 并且计算fac(2)
return f ;
}
unsigned fac(2){
unsigned f;
if(n==0)
f=1;
else
f=fac(1)*2; //这里将继续调用fac 并且计算fac(1)
return f ;
}
unsigned fac(1){
unsigned f;
if(n==0)
f=1; // 到这一步判断为true 所以下面返回f=1 然后fac(1) =1 回到fac(2)函数 计算结果是f=fac(1)*2 返回值是 f=1*2=2 然后再回到fac(3)函数 计算结果是f=fac(2)*3=2*3 return f=7
else
f=fac(1)*2; //这里将继续调用fac 并且计算fac(1)
return f ;
}