Multifactorial: Difference between revisions
(Explicitly remove n==0) |
(→{{header|Python}}: Add recursive version) |
||
Line 17: | Line 17: | ||
=={{header|Python}}== |
=={{header|Python}}== |
||
===Python: Iterative=== |
|||
<lang python>>>> from functools import reduce |
<lang python>>>> from functools import reduce |
||
>>> from operator import mul |
>>> from operator import mul |
||
Line 33: | Line 34: | ||
9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
||
10: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
10: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
||
>>> </lang> |
|||
===Python: Recursive=== |
|||
<lang python>>>> def mfac2(n, m): return n if n <= (m + 1) else n * mfac2(n - m, m) |
|||
>>> for m in range(1, 6): print("%2i: %r" % (m, [mfac2(n, m) for n in range(1, 11)])) |
|||
1: [1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800] |
|||
2: [1, 2, 3, 8, 15, 48, 105, 384, 945, 3840] |
|||
3: [1, 2, 3, 4, 10, 18, 28, 80, 162, 280] |
|||
4: [1, 2, 3, 4, 5, 12, 21, 32, 45, 120] |
|||
5: [1, 2, 3, 4, 5, 6, 14, 24, 36, 50] |
|||
>>> </lang> |
>>> </lang> |
Revision as of 07:15, 13 November 2012
The factorial of a number, written as is defined as
A generalization of this is the multifactorials where:
- Where the products are for positive integers.
If we define the degree of the multifactorial as the difference in successive terms that are multiplied together for a multifactorial (The number of exclamation marks) then the task is to
- Write a function that given n and the degree, calculates the multifactorial.
- Use the function to generate and display here a table of the first 1..10 members of the first five degrees of multifactorial.
Note: The wikipedia entry on multifactorials gives a different formula. This task uses the Wolfram mathworld definition.
Python
Python: Iterative
<lang python>>>> from functools import reduce >>> from operator import mul >>> def mfac(n, m): return reduce(mul, range(n, 0, -m))
>>> for m in range(1, 11): print("%2i: %r" % (m, [mfac(n, m) for n in range(1, 11)]))
1: [1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800] 2: [1, 2, 3, 8, 15, 48, 105, 384, 945, 3840] 3: [1, 2, 3, 4, 10, 18, 28, 80, 162, 280] 4: [1, 2, 3, 4, 5, 12, 21, 32, 45, 120] 5: [1, 2, 3, 4, 5, 6, 14, 24, 36, 50] 6: [1, 2, 3, 4, 5, 6, 7, 16, 27, 40] 7: [1, 2, 3, 4, 5, 6, 7, 8, 18, 30] 8: [1, 2, 3, 4, 5, 6, 7, 8, 9, 20] 9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
10: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> </lang>
Python: Recursive
<lang python>>>> def mfac2(n, m): return n if n <= (m + 1) else n * mfac2(n - m, m)
>>> for m in range(1, 6): print("%2i: %r" % (m, [mfac2(n, m) for n in range(1, 11)]))
1: [1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800] 2: [1, 2, 3, 8, 15, 48, 105, 384, 945, 3840] 3: [1, 2, 3, 4, 10, 18, 28, 80, 162, 280] 4: [1, 2, 3, 4, 5, 12, 21, 32, 45, 120] 5: [1, 2, 3, 4, 5, 6, 14, 24, 36, 50]
>>> </lang>