我这里只是想解决一个看起来很有趣的问题。我试着去思考它,但却找不到有效的解决方法。也许我的概念还在建立中... 不管怎样,问题如下:
想要找出给定字符串的所有可能排列...... 同时,如果有任何可能的变化,请分享。
我在网络上找到了一种使用递归的解决方案.. 但这似乎有些错误,不太令人满意。
程序如下:
void permute(char s[], int d)
{
int i;
if(d == strlen(s))
printf("%s",s);
else
{
for(i=d;i<strlen(s);i++)
{
swap(s[d],s[i]);
permute(s,d+1);
swap(s[d],s[i]);
}
}
}
如果这个程序看起来没问题(当我运行它时出现错误),请提供一个小例子来理解它,因为我还在学习递归的概念。
如果有任何其他有效的算法存在,也可以讨论...
请注意,这不是作业...
谢谢...
n!
:(1) 对于递归中每个叶子的printf
,它是n×n!
,(2) 对于每个递归级别上重复的strlen
,大约是n²×n!
。通过更加小心地编程,您可以轻松摆脱 (2) 中的额外n
因素。 - Jens Gustedt