HiveBrain v1.2.0
Get Started
← Back to all entries
patternpythonMinor

Inverse cascade challenge - Recursion

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
inversecascaderecursionchallenge

Problem

Print the following pattern, when you invoke inverse_cascade(1234)

1
12
123
1234
123
12
1


Solution:

def inverse_cascade(n):
    def grow(n):
        if n < 10:
            print(n)
        else:
            grow(n // 10)
            print(n)
    def shrink(n):
        if n < 10:
            print(n)
        else:
            print(n)
            shrink(n // 10)
    grow(n // 10)
    print(n)
    shrink(n // 10)


Using a recursion approach, how can I improve this code without using higher order functions?

Note: No data models have to be used.

Solution

Separate grow and shrink functions are not necessary. Instead you can have a single function that prints, recurses and prints again the same value when the recursion returns.

For example like this:

def inverse_cascade(n, digits=1):
    n = str(n)
    print(n[:digits])
    if digits < len(n):
        inverse_cascade(n, digits+1)
        print(n[:digits])

Code Snippets

def inverse_cascade(n, digits=1):
    n = str(n)
    print(n[:digits])
    if digits < len(n):
        inverse_cascade(n, digits+1)
        print(n[:digits])

Context

StackExchange Code Review Q#95538, answer score: 4

Revisions (0)

No revisions yet.