我遇到的问题:
导师让我实现递归方法输出排列组合
但我总是执行完递归调用以后 就不往下执行了
如图
执行完内调用,就跳不出去了,无法回溯
产生的问题就是C(5,4)只输出 5432,5431,就停止执行了
什么原因?
因为awk中的变量都是全局变量,改变变量时会影响全局的执行,所以要让他变成局部变量
如图:
定义的function 函数那里,加个虚列k,使k变成局部变量
然后将原来的i改成k就可以
bar=1
}
{}
END{
for(i=1;i<=NF;i++)
a[i]=$i
combine(a,5,4,b,4)
}
function combine(a,n,m,b,M,k){
for(k=n;k>=m;k--){ #m=3
b[m]=k
if(m>1)
combine(a,k-1,m-1,b,M)
else{
for(j=M;j>0;j--)
printf("%d",a[b[j]]);
printf("\n");
}
}
}
贴出网上方法:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531181621446.png)
[awk递归调用方法博客](https://www.cnblogs.com/qieerbushejinshikelou/p/3705541.html)