Comments (10)
The factorial of 0
is actually 1
. I've been taught this multiple times and a quick google search says so. So technically factorial(0) -> 1
is correct. Safeguards for negative numbers are not in place, but I expect we can easily PR that to fix the problem.
from 30-seconds-of-code.
this will be helpful @monikadhok @Chalarangelo
let factorial = n => n < 0 ?
(() => { throw new TypeError('Negative numbers are not allowed!') })() : n <= 1 ?
1 : n * factorial(n - 1);
from 30-seconds-of-code.
the code returns 1 for any value lower than 1 and the recursion ends, which actually mean factorial(0) returns 1, which is wrong as it should return 0.
negative numbers are an invalid input and none of these example functions really have any guards or validation, so that probably isn't 'wrong' however !0 === 1 is mathematically incorrect
from 30-seconds-of-code.
Similar safeguards can be added in multiple other examples. For example, x modulo 0 is not defined in pratice (snippet does not handle this!)
from 30-seconds-of-code.
We are currently discussing, under #172, the need for error handling. In general, we're probably going to go with no error handling except if it's necessary. In the factorial snippet, I think it isn't, but I am a little opinionated on that. More opinions?
from 30-seconds-of-code.
Factorials of negative numbers are dependent on if it's even or odd, and by definition are -Infinity or Infinity because there is no way for the construct( algorithm ) to stop( it is defined stopped at special case 0/-0 )
Ideally it should be
const factorial = n => n < 0 ? n % 2 == 0 ? Infinity : -Infinity : n == 0 ? 1 : n * factorial(n-1)
from 30-seconds-of-code.
@skatcat31 That sounds like a good way to handle this, let's get it fixed then.
from 30-seconds-of-code.
@skatcat31 It should be const factorial = n => n < 0 ? Math.abs(n) % 2 == 0 ? Infinity : -Infinity : n == 0 ? 1 : n * factorial(n-1)
Javascript gives -8%2 == -0
from 30-seconds-of-code.
@kriadmin -0 === 0 === true
, lets us avoid a function call
Where our snippet fix fail is in handling decimals since it is supposed to clamp them to the nearest integer value
from 30-seconds-of-code.
This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for any follow-up tasks.
from 30-seconds-of-code.
Related Issues (20)
- Merge two arrays and remove duplicate elements HOT 2
- CSVToArray will return an empty item for documents ending with \n HOT 2
- addDaysToDate fails with non-UTC timezone HOT 1
- A snippet folder dedicated to Angular
- Js
- Broken links HOT 4
- New snippet ideas HOT 1
- passive-scroll-listener-performance has obsolete/incorrect advice HOT 2
- Regarding the throttle function's question. HOT 7
- style: Centering the footer section ⏡ HOT 2
- Website Navigation Bar
- cookie parsing containing a `=` in value HOT 5
- [ BUG ] Missing space in footer section HOT 12
- Typo in the event-loop-explained.md snippet HOT 2
- fix: Unnecessary parameter in Queue class methods HOT 2
- Terminology issue in blog HOT 4
- :bug: Fix Footer settingsPath (GithHub,CC ,30-sec-of-code Link)
- Kindly add hacktoberfest label to your repo. HOT 1
- [Feature Request] : The border of search bar is not clearly visible .
- Typo on the website
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from 30-seconds-of-code.