Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

171
Views
Javascript Recursive Function Currying and Arrow Functions

This is fine and works:

const power = (x,n) => {
  if (n === 0) return 1;
  return x * power(x, n - 1);
}

power(4,3) 64

But trying to do this as experiment - does not work gives NaN Do not understand why:

node .editor // Entering editor mode (Ctrl+D to finish, Ctrl+C to cancel)

const power = x => {
  return n => {
    if (n === 0) return 1;
    return x * power(x, n - 1);
  }
}

let t = power(4) t(3) NaN

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

You haven't converted the recursive call in the curried version to curried form. power(x, n - 1) is essentially the same as power(x) because power only accepts one argument, and this is a function, so not unreasonably becomes NaN when you try to multiply it by a number.

Rewrite it like this instead:

const power = x => {
  return n => {
    if (n === 0) return 1;
    return x * power(x)(n - 1);
  }
};

console.log('4^3 = ', power(4)(3));     // 64
console.log('2^10 = ', power(2)(10));   // 1024
console.log('5^4 = ', power(5)(4));     // 625
console.log('3^4 = ', power(3)(4));     // 81

about 4 years ago · Juan Pablo Isaza Report

0

You could store the nested function and return the function and use this function for another call with only the changed n.

const
    power = x => {
        const
            fn = n => n === 0
                ? 1
                : x * fn(n - 1);

        return fn;
    };

console.log(power(4)(3));

about 4 years ago · Juan Pablo Isaza Report

0

As we are discussing "weird" function forms I might as well contribute my two cents worth:

You can also do the curried function as a one-liner like this:

const power = (x,pow) => pow = n => --n ? x*pow(n) : x;

console.log(power(3)(4)); // 81

This is, of course, something that nobody in their right mind would ever do. Still - it works!

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!