# Answer to Question #28486 in Python for Daniel

Question #28486

How to write a program that counts rearrangements of a word in Python using recursion?

Description: The letters of the word "bookkeeper" can be rearranged in 151,200

ways. Of course this is far too many to write them all down. However, there are

formulas that allow us to count such things.

The number of ways to rearrange n objects in a line is given by the formula

n! = n(n −1)(n −2) ⋯ (2) 1

If m of the objects are indistinguishable, then for each distinct arrangement, there will be

exactly m! indistinguishable rearrangements, so the total number is n!/m! In our problem,

there are 10 letters (b, o, o, k, k, e, e, p, e, r), including 2 o's, 2, k's, and 3 e's. So the total

number of rearrangements is

10! / 2!2!3! = (10 ⋅ 9 ⋅ 8 ⋅ 7 ⋅ 6 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 2 ⋅ 1) / (2 ⋅ 1)(2 ⋅ 1)(3 ⋅ 2 ⋅ 1) = 151,200

In this program, I need to write a recursive function to compute factorials, and

use the function to count the number of rearrangements of the letters of words.

I need two functions.

Description: The letters of the word "bookkeeper" can be rearranged in 151,200

ways. Of course this is far too many to write them all down. However, there are

formulas that allow us to count such things.

The number of ways to rearrange n objects in a line is given by the formula

n! = n(n −1)(n −2) ⋯ (2) 1

If m of the objects are indistinguishable, then for each distinct arrangement, there will be

exactly m! indistinguishable rearrangements, so the total number is n!/m! In our problem,

there are 10 letters (b, o, o, k, k, e, e, p, e, r), including 2 o's, 2, k's, and 3 e's. So the total

number of rearrangements is

10! / 2!2!3! = (10 ⋅ 9 ⋅ 8 ⋅ 7 ⋅ 6 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 2 ⋅ 1) / (2 ⋅ 1)(2 ⋅ 1)(3 ⋅ 2 ⋅ 1) = 151,200

In this program, I need to write a recursive function to compute factorials, and

use the function to count the number of rearrangements of the letters of words.

I need two functions.

Expert's answer

## Comments

## Leave a comment