簡體   English   中英

帶有斐波那契-Python-的遞歸樹

[英]Recursion tree with Fibonacci -Python-

我正在學習遞歸,我寫了這個(低效的)第 n 個斐波那契數計算器:

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

我知道在遞歸中,您可以繪制所謂的“遞歸樹”。 當我制作這個簡單的二進制生成器時:

def binary(length, outstr=""):
    if len(outstr) == length:
        print(outstr)
    else:
        for i in ["0", "1"]:
            binary(length, outstr + i)

我可以弄清楚這棵樹長什么樣子: 在此處輸入圖片說明

但是我無法弄清楚斐波那契函數的樹! 那棵樹會是什么樣子?

提前致謝,

例如fibonacci(4)給出如下遞歸樹,因為需要兩個函數調用: fibonacci(3)fibonacci(2) ,所以每次調用函數,調用其他兩個函數,直到達到退出條件。

            4
           / \
          /   \
         /     \
        3       2
       / \     / \
      /   \   /   \
     2     1 1     0
    / \
   /   \
  1     0

您可以使用 Python 中的recursion- visualiser 包輕松可視化任何遞歸函數。 你只需要在你的函數中添加裝飾器,剩下的就交給它了。

二進制字符串

讓我們先對二進制字符串進行處理。

from visualiser.visualiser import Visualiser as vs

"""
Problem Link: https://stackoverflow.com/questions/33808653/recursion-tree- 
with-fibonacci-python/60126306#60126306
"""

@vs(node_properties_kwargs={"shape":"record", "color":"#f57542","style":"filled", "fillcolor":"grey"})
def binary(length, outstr=""):
     if len(outstr) == length:
          print(outstr)
     else:
          for i in ["0", "1"]:
               binary(length=length, outstr=outstr + i)

binary(length=3,outstr="")
vs.make_animation("binary_string.gif", delay=2)

這是輸出動畫的樣子二進制字符串.gif

最后的樹也保存為: binary_string.png

斐波那契:讓我們將其可視化為 fib(6)

# Import Visualiser class from module visualiser
from visualiser.visualiser import Visualiser as vs

# Add decorator
@vs(node_properties_kwargs={"shape":"record", "color":"#f57542", "style":"filled", "fillcolor":"grey"})
def fib(n):
    if n <= 1:
        return n
    return fib(n=n - 1) + fib(n=n-2)

def main():
    print(fib(n=6))
    vs.make_animation("fibonacci.gif", delay=2)

if __name__ == "__main__":
    main()

這是看起來好多了的輸出:動畫.gif

這是遞歸樹的最終圖像:出.png

此處查看更多示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM