The Wayback Machine - https://web.archive.org/web/20200831054220/https://github.com/TheAlgorithms/Python/pull/1888
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed error in factorial.py #1888

Merged
merged 5 commits into from Aug 5, 2020
Merged

fixed error in factorial.py #1888

merged 5 commits into from Aug 5, 2020

Conversation

@SandersLin
Copy link
Contributor

SandersLin commented Apr 17, 2020

Describe your change:

factorial(11) returns index out of range. To implement memoization an auxiliary function is required.

  • Add an algorithm?
  • Fix a bug or typo in an existing algorithm?
  • Documentation change?

Checklist:

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • All new algorithms have a URL in its comments that points to Wikipedia or other similar explanation.
  • If this pull request resolves one or more open issues then the commit message contains Fixes: #{$ISSUE_NO}.
Copy link

us3rnotfound left a comment

Recommend making factorial_aux a private function since no outside entity need use it.

Recommend putting the debug statements back in showing where to print result for debugging, although I noticed debugging it in that fashion causes docttest to print out a lot of example failed blocks.

Otherwise I think this change is good and it makes sense.

mateuszz0000 and others added 2 commits Jun 23, 2020
github-actions github-actions
@TravisBuddy
Copy link

TravisBuddy commented Jun 23, 2020

Hey @SandersLin,
Something went wrong with the build.

TravisCI finished with status errored, which means the build failed because of something unrelated to the tests, such as a problem with a dependency or the build process itself.

View build log

TravisBuddy Request Identifier: 09604660-b535-11ea-aae7-0b05fcc524af
@pawarashish564
Copy link

pawarashish564 commented Jul 8, 2020

we can use math.factorial if required .

return factorial_aux(num, result)


def factorial_aux(num, result):

This comment has been minimized.

@cclauss

cclauss Jul 8, 2020

Member

Type hints? Doctests?

Copy link

pawarashish564 left a comment

Its working .!

result[num] = num * factorial(num - 1)
# uncomment the following to see how recalculations are avoided
# print(result)
result[num] = num * factorial_aux(num - 1, result)

This comment has been minimized.

@fhlasek

fhlasek Aug 5, 2020

Contributor

Technically, this is more of a "memoization" approach. While being perfectly correct, the more appropriate algorithm for this section may look as follows

Suggested change
result[num] = num * factorial_aux(num - 1, result)
result[0] = 1
for i in xrange(num):
result.append((i + 1) * result[i])
return result[num]

This comment has been minimized.

@cclauss

cclauss Aug 5, 2020

Member

xrange() was removed from Python on 1/1/2020.

The canonical way to do memoization in Python is with the lru_cache function decorator.

@github-actions github-actions bot force-pushed the SandersLin:patch-33 branch from a244df1 to b7ecbf6 Aug 5, 2020
@TravisBuddy
Copy link

TravisBuddy commented Aug 5, 2020

Hey @SandersLin,
Something went wrong with the build.

TravisCI finished with status errored, which means the build failed because of something unrelated to the tests, such as a problem with a dependency or the build process itself.

View build log

TravisBuddy Request Identifier: aabb4010-d708-11ea-85fc-4b61cecd2c91
@cclauss
cclauss approved these changes Aug 5, 2020
@cclauss cclauss merged commit f0d7879 into TheAlgorithms:master Aug 5, 2020
2 checks passed
2 checks passed
codespell
Details
Travis CI - Pull Request Build Passed
Details
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

8 participants
You can’t perform that action at this time.