Snowflake og rekursjon¶

Utvidet versjon av forelesers snowflake-funksjon som viser rekursjonsnivåene og depth-verdiene underveis.

>> viser at snowflake har blitt kalt
<< viser at programmet går ut av snowflake

grad av innrykk viser hvilket rekursjonsnivå programmet/funksjonen er på

16.10.2025 Sverre Stikbakke

In [1]:
from turtleplotlib import Turtle
t = Turtle(interactive=False)
<Figure size 500x500 with 0 Axes>
In [2]:
def print_levels(level, depth, desc):
    padding = ' ' * 4
    print(f"{padding * level}{padding}{desc} {level, depth}")


def snowflake(turtle, depth, level=0):
    print_levels(level, depth, ">> level/depth: ")
    if depth == 0:
        turtle.forward(10)
        print_levels(level, depth, "F ")
    else:
        snowflake(turtle, depth-1, level+1)
        turtle.left(60)
        print_levels(level, depth, "+ ")
        snowflake(turtle, depth-1, level+1)
        turtle.right(60)
        print_levels(level, depth, "- ")
        turtle.right(60)
        print_levels(level, depth, "- ")
        snowflake(turtle, depth-1, level+1)
        turtle.left(60)
        print_levels(level, depth, "+ ")
        snowflake(turtle, depth-1, level+1)

    print_levels(level, depth, "<< level/depth: ")
In [3]:
t = Turtle(interactive=False)
snowflake(t, 0, 0)
    >> level/depth:  (0, 0)
    F  (0, 0)
    << level/depth:  (0, 0)
No description has been provided for this image
In [4]:
t = Turtle(interactive=False)
snowflake(t, 1)
    >> level/depth:  (0, 1)
        >> level/depth:  (1, 0)
        F  (1, 0)
        << level/depth:  (1, 0)
    +  (0, 1)
        >> level/depth:  (1, 0)
        F  (1, 0)
        << level/depth:  (1, 0)
    -  (0, 1)
    -  (0, 1)
        >> level/depth:  (1, 0)
        F  (1, 0)
        << level/depth:  (1, 0)
    +  (0, 1)
        >> level/depth:  (1, 0)
        F  (1, 0)
        << level/depth:  (1, 0)
    << level/depth:  (0, 1)
No description has been provided for this image
In [5]:
t = Turtle(interactive=False)
snowflake(t, 2)
    >> level/depth:  (0, 2)
        >> level/depth:  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        +  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        -  (1, 1)
        -  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        +  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        << level/depth:  (1, 1)
    +  (0, 2)
        >> level/depth:  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        +  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        -  (1, 1)
        -  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        +  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        << level/depth:  (1, 1)
    -  (0, 2)
    -  (0, 2)
        >> level/depth:  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        +  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        -  (1, 1)
        -  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        +  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        << level/depth:  (1, 1)
    +  (0, 2)
        >> level/depth:  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        +  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        -  (1, 1)
        -  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        +  (1, 1)
            >> level/depth:  (2, 0)
            F  (2, 0)
            << level/depth:  (2, 0)
        << level/depth:  (1, 1)
    << level/depth:  (0, 2)
No description has been provided for this image
In [6]:
t = Turtle(interactive=False)
snowflake(t, 3)
    >> level/depth:  (0, 3)
        >> level/depth:  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        +  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        -  (1, 2)
        -  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        +  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        << level/depth:  (1, 2)
    +  (0, 3)
        >> level/depth:  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        +  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        -  (1, 2)
        -  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        +  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        << level/depth:  (1, 2)
    -  (0, 3)
    -  (0, 3)
        >> level/depth:  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        +  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        -  (1, 2)
        -  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        +  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        << level/depth:  (1, 2)
    +  (0, 3)
        >> level/depth:  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        +  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        -  (1, 2)
        -  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        +  (1, 2)
            >> level/depth:  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            -  (2, 1)
            -  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            +  (2, 1)
                >> level/depth:  (3, 0)
                F  (3, 0)
                << level/depth:  (3, 0)
            << level/depth:  (2, 1)
        << level/depth:  (1, 2)
    << level/depth:  (0, 3)
No description has been provided for this image