给定C中的字符串链接列表,以递归方式找到n个单词排列?

时间:2018-09-15 19:35:15

标签: c

我在创建一个递归算法时遇到困难,该算法在给定的字符串链接列表中查找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;
        }
    }
}

对不起,我的伪代码到处都是。

1 个答案:

答案 0 :(得分:-1)

递归涉及找到一个归纳案例和一个基本案例。归纳案例使您更接近解决方案,而基本案例则解决了该问题的一小部分。

在这种情况下,您的基本情况是“使用一个元素查找列表的所有排列”。此集合中只有一个值,即字符串本身。

对于归纳案例,一个很好的候选者是“对于集合中的每个字符串,返回该字符串与集合中每个不包含该字符串的排列的串联”。