这道题怎么做?

#include<stdio.h>voidf(inta[],intn,intk){inti,t;if(n<=k){for(i=0;i<=k;i++)printf("%d"... #include<stdio.h>void f(int a[],int n,int k){int i,t;if(n<=k){for(i=0;i<=k;i++)printf("%d",a[i]);printf(" ");}else{for(i=k;i<=n;i++){t=a[k];a[k]=a[i];a[i]=t;f(a,n,k+1);t=a[k];a[k]=a[i];a[i]=t;}}}void main(){int b[]={1,2,3};f(b,2,0);printf("\n");} 展开
 我来答
百度网友3b5a5d8
2020-01-07 · TA获得超过1229个赞
知道大有可为答主
回答量:1279
采纳率:83%
帮助的人:132万
展开全部

你好,

你的代码运行结果如下:

看结果就是排列组合。

如果先不看递归的那行,那么那个for循环造成的结果可以分析为 进行n+1 次交换,第一次为自身交换,后面为首元素和a[i]交换。

再看递归那一行,不断提高k的值,即上面的首元素向后偏移,当首元素为末尾元素的时候就打印数组。


那么只有当n==k+1 的时候才会有结束,此时为 f(a,n,1+1);

那么最后的可以分析为

for ...   k = 1, i = 1

a[1],a[1] 交换

打印

a[1],a[1] 交换

.

for ...   k = 1, i = 2

a[1],a[2] 交换

打印

a[1],a[2] 交换

.

大致就是这样,然后就是外面套几层for循环、交换数组元素的问题了。


祝你生活愉快。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式