我在创建一个递归算法时遇到困难,该算法在给定的字符串链接列表中查找n个单词排列的数量。
因此,该函数应获取字符串的链接列表,并输出这些字符串的所有可能的串联排列的链接列表,以空格分隔。
本质上,如果链表是说的(“ cat”,“ dog”,“ mouse”)并且n为3,则它应该返回:
“猫老鼠”,“猫老鼠”,“猫老鼠”,“猫老鼠”, “老鼠猫狗”和“老鼠猫”。
类似地,如果n为2,则应返回:
“猫狗”,“猫鼠”,“狗猫”,“狗鼠”,“鼠标猫”和 “老鼠狗”。
编辑:
我有一些试图写出来的伪代码:
permutations(list, n, newList, char *phrase){
//base case
if(n == 0){
add phrase to newlist
//inductive case
} else {
while(list != null){
create a copy of the list without the word from current node = copyList
char test[100];
strcpy(test, list->word);
strcat(phrase, test);
permutations(copyList, n-1, newList, phrase);
list = list->next;
}
}
}
对不起,我的伪代码到处都是。
答案 0 :(得分:-1)
递归涉及找到一个归纳案例和一个基本案例。归纳案例使您更接近解决方案,而基本案例则解决了该问题的一小部分。
在这种情况下,您的基本情况是“使用一个元素查找列表的所有排列”。此集合中只有一个值,即字符串本身。
对于归纳案例,一个很好的候选者是“对于集合中的每个字符串,返回该字符串与集合中每个不包含该字符串的排列的串联”。