这个图是醉了,不过先执行再复用当前函数的建议还是用循环
递归或者说是函数重入,主要关注收敛条件也就是运行结束的判断
先复用再执行的场景比较多,所以循环做起来有困难的可以考虑这个递归
建议不要上来就采用递归
下面举两个例子
比如
程序代码:
这里就是,每次先不停的纵深,直到倒数第二步n=1,执行trace(0)判断false无输出
然后开始倒扒皮慢慢往外退,继续上一轮trace(n-1)下面的任务
下面是高中的排列组合的例子,可以试着分析下
程序代码:
递归或者说是函数重入,主要关注收敛条件也就是运行结束的判断
先复用再执行的场景比较多,所以循环做起来有困难的可以考虑这个递归
建议不要上来就采用递归
下面举两个例子
比如
程序代码:#include<stdio.h>
void trace(int n){
if(n>0){//收敛条件
trace(n-1);//函数重入
printf("%d",n);
}
}
int main(){
trace(4);
}
这里就是,每次先不停的纵深,直到倒数第二步n=1,执行trace(0)判断false无输出
然后开始倒扒皮慢慢往外退,继续上一轮trace(n-1)下面的任务
下面是高中的排列组合的例子,可以试着分析下
程序代码:#include<stdio.h>
void trace(int arr[],int len,int arr2[],int len2,int size)
{
if(len2>=size)
{
for(int i=0;i<size;i++)
printf("%d\t",arr2[i]);
printf("\n");
return;
}
for(int i=0;i<len;i++)
{
if(len2==0||arr[i]>arr2[len2-1])
{
arr2[len2]=arr[i];
trace(arr,len,arr2,len2+1,size);
}
}
}
int main()
{
int arr[4]={1,2,3,4};
int arr2[4];
trace(arr,4,arr2,0,3);
}
剑栈风樯各苦辛,别时冰雪到时春






