[英]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)
斐波那契:讓我們將其可視化為 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()
這是看起來好多了的輸出:
這是遞歸樹的最終圖像:
在此處查看更多示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.