递归按我的理解就是一颗递归树,当根节点调用开始后,下探到叶节点,然后返回叶节点的值,但是,根节点要想获得叶节点的这个返回值,并不能由叶节点直接获得,需要层层传递到根节点。
一个小题目
有一个数组 a = { 1,2,8,7,5} 若从dfs(0)开始调用,0 代表数组的下标0,把a[4]的值赋给a[0],如何做?
#include <cstdio>
using namespace std;
int a[5]={1,2,8,7,5};
int dfs(int u){
if(u==4) return a[u];
int d=dfs(u+1);
if(u==0) a[u]=d;
return d;
}
int main(){
dfs(0);
for(int i=0;i<5;i++){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
理解
代码很短,题目很好理解,就是用递归把a[4]的值赋给a[0]。
小问题:
若代码改为:数组a的值都是什么?
int dfs(int u){
if(u==4) return a[u];
int d=dfs(u+1);
a[u]=d;
return d;
}
叶节点只执行退出代码。
例题:用递归求解 1+2+3+…+n 的和
int ans=0;
int sum(int u){
if(u==n) return u;
int d=sum(u+1);
return d+u;
}