函数自己调用自己,就叫做函数的递归调用。
void shuChu(int i){
cout << "输出内容的函数" << i << endl;
//自己调用自己,就是递归
shuChu(i);
}
int main(){
shuChu(100);
}
在递归调用的时候,要特别注意递归的终止
,如果没有终止,那么函数会无限的递归调用下去,类似死循环一样。
一、递归要素
所以,如果一个函数是递归函数,那么一定要注意两点:
1、终止条件:递归停止条件,否则会无线循环;
2、递归条件:函数调用自己的条件;
void shuChu(int i){
cout << "输出内容的函数" << i << endl;
i--;
if(i < 0){ //递归停止条件
return ; //终止递归
}else{
//自己调用自己,就是递归
shuChu(i);
}
}
int main(){
shuChu(100);
}
二、代码案例
输入一个数字 n ,计算 1 到 n 的和。
// for 循环求和
int qiuHe(int n){
int a = 0;
for(int i = 1; i <= n; i++){
a = a + i;
}
return a;
}
也可以使用递归实现
int qiuHe(int n){
int t = 0;
if(n == 1){
return 1;
}else{
t = n + qiuHe(n-1);
}
return t;
}
//main函数
int main(){
int a = qiuHe(5);//开始调用递归函数
return 0;
}
函数调用过程,在main函数中调用 qiuHe(5);
qiuHe(5) = 5 + qiuHe(4);
qiuHe(4) = 4 + qiuHe(3);
qiuHe(3) = 3 + qiuHe(2);
qiuHe(2) = 2 + qiuHe(1);
也就是:5 + 4 + 3 + 2 + 1
调用的时候,是从上往下依次调用,当到 qiuHe(1) 时直接返回的是 1,所以到这里就终止了,然后把这个值依次向上返回,进行相加。
可以使用 for 循环的地方通常也可以使用递归来解决,有的使用for循环更方便,有的使用递归更简洁。