这个图是醉了,不过先执行再复用当前函数的建议还是用循环
递归或者说是函数重入,主要关注收敛条件也就是运行结束的判断
先复用再执行的场景比较多,所以循环做起来有困难的可以考虑这个递归
建议不要上来就采用递归
下面举两个例子
比如
这里就是,每次先不停的纵深,直到倒数第二步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); }
剑栈风樯各苦辛,别时冰雪到时春