Skip to main content Skip to docs navigation

Recursion

The act of a function calling itself, recursion is used to solve problems that contain smaller sub-problems. A recursive function can receive two inputs: a base case (ends recursion) or a recursive case (resumes recursion).

On this page

Recursion

Examples

Recursive function calls itself until condition met

The following Python code defines a function that takes a number, prints it, and then calls itself again with the number's value -1. It keeps going until the number is equal to 0, in which case it stops.

py
                                        
                                            def
                                            recurse
                                            (
                                            x)
                                            :
                                            if
                                            x >
                                            0
                                            :
                                            print
                                            (
                                            x)
                                            recurse(
                                            x -
                                            1
                                            )
                                            recurse(
                                            10
                                            )
                                        
                                    

The output will look like this:

10 9 8 7 6 5 4 3 2 1

Recursion is limited by stack size

The following code defines a function that returns the maximum size of the call stack available in the JavaScript runtime in which the code is run.

js
                                        
                                            const
                                            getMaxCallStackSize
                                            =
                                            (
                                            i
                                            )
                                            =>
                                            {
                                            try
                                            {
                                            return
                                            getMaxCallStackSize
                                            (
                                            ++
                                            i)
                                            ;
                                            }
                                            catch
                                            {
                                            return
                                            i;
                                            }
                                            }
                                            ;
                                            console.
                                            log
                                            (
                                            getMaxCallStackSize
                                            (
                                            0
                                            )
                                            )
                                            ;
                                        
                                    

Common usage examples

js
                                        
                                            const
                                            factorial
                                            =
                                            (
                                            n
                                            )
                                            =>
                                            {
                                            if
                                            (
                                            n ===
                                            0
                                            )
                                            {
                                            return
                                            1
                                            ;
                                            }
                                            else
                                            {
                                            return
                                            n *
                                            factorial
                                            (
                                            n -
                                            1
                                            )
                                            ;
                                            }
                                            }
                                            ;
                                            console.
                                            log
                                            (
                                            factorial
                                            (
                                            10
                                            )
                                            )
                                            ;
                                            // 3628800
                                        
                                    
js
                                        
                                            const
                                            fibonacci
                                            =
                                            (
                                            n
                                            )
                                            =>
                                            (
                                            n <=
                                            2
                                            ?
                                            1
                                            :
                                            fibonacci
                                            (
                                            n -
                                            1
                                            )
                                            +
                                            fibonacci
                                            (
                                            n -
                                            2
                                            )
                                            )
                                            ;
                                            console.
                                            log
                                            (
                                            fibonacci
                                            (
                                            10
                                            )
                                            )
                                            ;
                                            // 55
                                        
                                    
js
                                        
                                            const
                                            reduce
                                            =
                                            (
                                            
                                                fn,
                                                acc,
                                                [
                                                cur,
                                                ...
                                                rest]
                                            
                                            )
                                            =>
                                            cur ===
                                            undefined
                                            ?
                                            acc :
                                            reduce
                                            (
                                            fn,
                                            fn
                                            (
                                            acc,
                                            cur)
                                            ,
                                            rest)
                                            ;
                                            console.
                                            log
                                            (
                                            reduce
                                            (
                                            (
                                            
                                                a,
                                                b
                                            
                                            )
                                            =>
                                            a +
                                            b,
                                            0
                                            ,
                                            [
                                            1
                                            ,
                                            2
                                            ,
                                            3
                                            ,
                                            4
                                            ,
                                            5
                                            ,
                                            6
                                            ,
                                            7
                                            ,
                                            8
                                            ,
                                            9
                                            ]
                                            )
                                            )
                                            ;
                                            // 45
                                        
                                    

See also

Updated on April 20, 2024 by Datarist.