递归递归,就是先递再归,有两个过程,分别是递和归,从形式上来看,如果一个方法内部调用了自己本函数,我们这种情况为递归
递归的三要素
1.找重复(子问题)
2.找重复中的变化量(参数)
3.找递归的出口(某一条件)
如果一个函数,自己调用了自己,但是又没有递归的出口,那么便会出现StackOverflow的情况,比如如下这个例子:
f(int i) {f(i-1);} 此递归将会无穷无尽,这种现象称为死循环
如果要将其终止,必须要有递归出口
f(int i) {if(i==0) return;f(i-1)}
练习策略
1.循环改递归
2.经典递归
3.大量练习,总结规律,掌握套路
4.找到感觉,挑战高难度
例题:
一、求阶乘
#include <bits/stdc++.h>
using namespace std;
int f(int n)
{
if(n==1)
return 1;
return n*f(n-1);
}
int main()
{
int m;
cin >> m;
cout << f(m) << endl;
return 0;
}
二、打印i-j
#include<bits/stdc++.h>
using namespace std;
void f(int i,int j)
{
if(i>j)
{
return;
}
cout << i << endl;
f(i+1,j);
}
int main()
{
int n,m;
cin >> n >> m;
f(n,m);
return 0;
}