深度理解递归(树的深度优先遍历、费波那契数列)c++
- 递归展开图就是一棵树
- 递归的过程,其实就是在对这棵树执行深度优先遍历
代码1:遍历树
//vector存储树
#include <iostream>
#include <vector>
using namespace std;
const int n = 1e5 + 10;
vector<int> edges[n];
bool st[n]; //标记哪些结点已经访问过了
int n;
void dfs(int u)
{
cout << u << " ";
st[u] = true;
for (auto v : edges[u])
{
if (!st[v])
{
dfs(v);
}
}
}
int main()
{
cin >> n;
for (int i = 1; i < n; ++i)
{
int a, b; cin >> a >> b;
edges[a].push_back(b);
edges[b].push_back(a);
}
dfs(1);
return 0;
}
再举个简单的例子
代码2:斐波那契数列
#include <iostream>
using namespace std;
//斐波那契数列
int fib(int n)
{
if (n == 0 || n == 1) return n;
return fib(n - 1) + fib(n - 2);
}
int main()
{
int n; cin >> n;
cout << fib(n) << endl;
return 0;
}