首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

递归的方法实现全排列,哪里出有关问题了

2012-07-25 
递归的方法实现全排列,哪里出问题了[codeC/C++][/code]#includestdio.hvoid swap(char& a,char& b){cha

递归的方法实现全排列,哪里出问题了
[code=C/C++][/code]
#include<stdio.h>
void swap(char& a,char& b)
{
char temp;
temp=a;
a=b;
b=temp;
}
void perm(char a[],int start,int end)
{
int i;
if(start==end)
{
for(i=0;i<=end;i++)
printf("%c ",a[i]);
printf("\n");
}
else
{
for(i=start;i<=end;i++)
{
swap(a[start],a[end]);
perm(a,start+1,end);
swap(a[start],a[end]);
}
}
}
int main()
{
char a[5]={'a','b','c','d','e'};
perm(a,0,4);
return 1;
}
楼主感觉没错啊,但运行时结果不对,求大神

[解决办法]
改成以下这样之后,无语法错误,可以运行,但是输出几乎一模一样,逻辑可能错了,不知原题是什么?

C/C++ code
#include<stdio.h>void swap(char *a,char *b){    char temp;    temp=*a;    *a=*b;    *b=temp;}void perm(char a[],int start,int end){    int i;    if(start==end)    {        for(i=0; i<=end; i++)            printf("%c ",a[i]);        printf("\n");    }    else    {        for(i=start; i<=end; i++)        {            swap(&a[start],&a[end]);            perm(a,start+1,end);            swap(&a[start],&a[end]);        }    }}int main(){    char a[5]= {'a','b','c','d','e'};    perm(a,0,4);    return 1;}
[解决办法]
C/C++ code
void swap(char * a,char * b){    char temp;    temp=*a;    *a=*b;    *b=temp;}void perm(char a[],int start,int end){    int i;    if(start==end)    {        for(i=0;i<=end;i++)            printf("%c ",a[i]);        printf("\n");    }    else    {        for(i=start;i<=end;i++)        {            swap(&a[start],&a[i]);            perm(a,start+1,end);            swap(&a[start],&a[i]);        }    }}
[解决办法]
C/C++ code
#include<stdio.h>#include <memory.h>int nTotal =0;递归调用那里有问题,由于数组a是会被改变的,因此最后时候的swap可能不是想要的简单改了一下:void swap(char& a,char& b){    char temp;    temp=a;    a=b;    b=temp;}void perm(char a[],int start,int end){    int i;    if(start==end)    {        for(i=0;i<=end;i++)        printf("%c ",a[i]);        printf("\n");        nTotal++;    }    else    {        char tmpBuf[100];        memcpy(tmpBuf,a+start,end-start+1);        for(i=start;i<=end;i++)        {            perm(a,start+1,end);            memcpy(a+start,tmpBuf,end-start+1);            swap(a[start],a[i+1]);        }    }}int main(){    char a[5]={'a','b','c','d','e'};    perm(a,0,4);    printf("total=%d \n" ,nTotal);    getchar();    return 1;} 

热点排行
Bad Request.