GithubHelp home page GithubHelp logo

Comments (10)

Chalarangelo avatar Chalarangelo commented on April 28, 2024 3

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.

sabareeshkk avatar sabareeshkk commented on April 28, 2024 2

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.

prodigic avatar prodigic commented on April 28, 2024 1

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.

monikadhok avatar monikadhok commented on April 28, 2024 1

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.

Chalarangelo avatar Chalarangelo commented on April 28, 2024

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.

skatcat31 avatar skatcat31 commented on April 28, 2024

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.

Chalarangelo avatar Chalarangelo commented on April 28, 2024

@skatcat31 That sounds like a good way to handle this, let's get it fixed then.

from 30-seconds-of-code.

rohitanwar avatar rohitanwar commented on April 28, 2024

@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.

skatcat31 avatar skatcat31 commented on April 28, 2024

@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.

lock avatar lock commented on April 28, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.