我如何在SML中实现这一点?是否可以将内部for循环更改为递归内部函数?
void RecursivePermute(char str[], int k) {
int j;
// Base-case: All fixed, so print str.
if (k == strlen(str))
printf("%s\n", str);
else {
// Try each letter in spot j.
for (j=k; j<strlen(str); j++) {
// Place next letter in spot k.
ExchangeCharacters(str, k, j);
// Print all with spot k fixed.
RecursivePermute(str, k+1);
// Put the old char back.
ExchangeCharacters(str, j, k);
}
}
}
答案 0 :(得分:0)
你可以像
那样写val rec RecursivePermute = fn (str, k) => ...
或
fun RecursivePermute (str, k) = ...
您还可以检查k的长度和长度
if (String.size str = k)
then ...
else ...
作为内循环函数,它会以不好的方式工作,所以除此之外做其他事情更好 它涉及String的表示。如果你想交换字符,它将在最坏的情况下工作O(n)n - 字符串的长度(由于你需要删除它们之间的字符,然后将它们放回去)。所以一般来说,你需要使用非常无效的O(n ^ 2)时间。