Write a program that lists all ways people can line up for a photo (all permutations of a list of strings). The program will read a list of one word names (until -1), and use a recursive method to create and output all possible orderings of those names separated by a comma, one ordering per line.

Respuesta :

The solution is the recursive Python 3 function below:

########################################################

def allNamePermutations(listOfNames):

   # return all possible permutations of listOfNames

   if len(listOfNames) == 0 or len(listOfNames) == 1:

       # base case

       return [listOfNames]

   else:

       # recursive step

       result_list = [ ]

       remaining_items = [ ]

       for firstName in listOfNames:

           remaining_items = [otherName for otherName in listOfNames if

                                                                     (otherName != firstName)]

           result_list += concat(firstName,

                                              allNamePermutations(remaining_items))

       return result_list

#######################################################

How does the above function work?

As with all recursive functions, this one also has a base case, and a recursive step. The base case tests to make sure the function terminates. Then, it directly returns a fixed value. It does not make a recursive call.

In the case of this function, the base case checked listOfNames to see if it was empty or only had one name. If any of the conditions were satisfied, a new list containing listOfNames is returned.

The recursive step is where the function allNamePermutations() calls itself recursively. The recursive step handles the case where listOfNames has more than one item. This step first iterates over each name in listOfNames, and then does the following;

  • Gets a name in listOfName
  • Gets a list of other names in listOfNames
  • Calls allNamePermutations() on the list of other names to get a list of permutation of the other names.

        (By first getting the list of other names before passing it into

         allNamePermutations(), we make sure the recursive step eventually

         terminates. This is because we are passing a smaller list each time

         we make the recursive call.)

  • Inserts the current name in front of each permutation
  • Adds the results to the result list to be returned later

After the iteration, it returns the result list which will now contain all permutations of the names in the list.

The concat function is defined below

##################################################

def concat(name, listOfNameLists):

   # insert name in front of every list in listOfNameLists

   result_list = [ ]

   for nameList in listOfNameLists:

       nameList.insert(0, name)

       result_list.append(nameList)

   return result_list

#####################################################

If we run the sample test case below

####################################

name_list = ['Adam', 'Barbara', 'Celine']

allNamePermutations(name_list)

####################################

the following output is produced

[['Adam', 'Barbara', 'Celine'],

['Adam', 'Celine', 'Barbara'],

['Barbara', 'Adam', 'Celine'],

['Barbara', 'Celine', 'Adam'],

['Celine', 'Adam', 'Barbara'],

['Celine', 'Barbara', 'Adam']]

For another example of how to use recursion in Python, see the following example in the link below

https://brainly.com/question/17229221