Skip to main content

Do tail recursion without overflowing with generators and functions.

Project description

Functional Recursion

Do tail recursion without overflowing with generators and functions.

Why?

I am coming from a background of functional programming languages where loops are not standard. Instead, recursion is used to achieve the same result more succinctly.

Overview

It provides:

  • Infinite recursion with return
  • Infinite recursion with generators (yield)

Using this has the following advantages:

  • Allows for more understandable code given the right situation
  • Avoid bugs because of deeply nested loops

Instructions

Run in the console

python3 -m pip install functional_recursion

(Use python or python3 depending on your environment)

And to use it

from functional_recursion import recur, recur_yield, tail_recursive, tail_recursive_yield

@tail_recursive
def fib_decorator_recursive(n, last_two=None):
    if last_two is None:
        last_two = (0, 1)
    if n == 0:
        return last_two[1]
    last_two = (last_two[1], sum(last_two))
    return recur(n - 1, last_two)


@tail_recursive_yield
def fib_decorator_recursive_generator(last_two=None):
    if last_two is None:
        last_two = (0, 1)
    last_two = (last_two[1], sum(last_two))
    return recur_yield(last_two, yield_val=last_two[0])

* See the complete examples and performance times here.

Authors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

functional_recursion-1.0.0.tar.gz (3.1 kB view hashes)

Uploaded Source

Built Distribution

functional_recursion-1.0.0-py3-none-any.whl (3.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page