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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file functional_recursion-1.0.0.tar.gz.

File metadata

  • Download URL: functional_recursion-1.0.0.tar.gz
  • Upload date:
  • Size: 3.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.5.0 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for functional_recursion-1.0.0.tar.gz
Algorithm Hash digest
SHA256 886610fdaa7bed2adafba45d498eca0b0d428e756c8fc2795eaba76296f09dac
MD5 b918da3ac48610753fa7e6e09a9b3e2e
BLAKE2b-256 a4d54575f560be544f10cacd4ae9ae3d499fb32f3060dca0a494a705d5c27696

See more details on using hashes here.

File details

Details for the file functional_recursion-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: functional_recursion-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 3.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.5.0 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for functional_recursion-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cc087cd2258a7d896b725322d0c77f556d4cfefe722a0c8bbdae10f8082e256d
MD5 74112e9e4e6eebc9cdbb544ba2aac116
BLAKE2b-256 1851f908fe0d6ac145e5a6762bcdb93d711d3155670793b4891cde7293696233

See more details on using hashes here.

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