c++递归问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 23:34:51
template<class T>
void Perm(T list[],int k, int m)
{
int i;
if(k==m)
{for(i=0;i<=m;i++)
cout<<list[i];
cout<<endl;}
else
for(i=k;i<m;i++)
{
Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
}
}

template<class T>
inline void Swap(T&a, T&b)
{
T temp = a; a=b; b= temp;
}
输入 char[]={a,b,c}
这段程序为啥出现的 结果是
abc
acb
bac
bca
cba
cab

如何理解这段程序 ?
Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
合理解释的另外有加分
还是没有读懂,如何得到acb的呢?第一个swap不应该出现bac的情况吗
照你那么说应该是
abc
bac...
回复合理的另外加再加50分!!!

连基本算法都不知道,还谈什么main()

SWAP是交换两个数,Perm是将数列的所有排列打印,给定数列abc,k==i,Swap(a,a)后数列为
a bc再perm,实际是求bc的全序,得a bc和acb
然后swap(a,a)交换回来;第二轮a和b交换,求全序ac,然后把a交换回来放在开头;第三轮....

连主函数都没有,怎么看啊?

#include<iostream>
using namespace std;
double sum(int n)
{
double f;
if(n<=0)
cout<<"n<=0,DATA ERROR"<<endl;
else if(n=1)
f=1.0;
else
f=sum(n-1)+1.0/n;
return (f);
}
int main()
{
double sum(int n);
int n;
cout<<"请输入n!"<<endl;
cin>>n;
double y;
y=sum(n);
cout<<"1+(1/2)+...+(1/n)="<<y<<endl;
}