编写一个程序,输入层数,显示对应递归树Python,运用tkinter
时间: 2024-06-01 08:02:42 浏览: 91
python 实现递归输出
以下是一个简单的程序,可以输入一个数字n,然后生成一个n层的递归树,并用tkinter显示出来。
```python
import tkinter as tk
def draw_tree(canvas, x, y, length, angle, depth):
if depth == 0:
return
x2 = x + length * tk.math.cos(angle)
y2 = y - length * tk.math.sin(angle)
canvas.create_line(x, y, x2, y2)
draw_tree(canvas, x2, y2, length / 2, angle - tk.math.pi / 4, depth - 1)
draw_tree(canvas, x2, y2, length / 2, angle + tk.math.pi / 4, depth - 1)
def draw():
depth = int(entry.get())
canvas.delete("all")
center_x = canvas.winfo_width() // 2
canvas.create_line(center_x, 0, center_x, 100)
draw_tree(canvas, center_x, 100, 100, tk.math.pi / 2, depth)
root = tk.Tk()
root.title("Recursive Tree")
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()
entry_frame = tk.Frame(root)
entry_frame.pack()
label = tk.Label(entry_frame, text="Depth:")
label.pack(side=tk.LEFT)
entry = tk.Entry(entry_frame)
entry.pack(side=tk.LEFT)
button = tk.Button(entry_frame, text="Draw", command=draw)
button.pack(side=tk.LEFT)
root.mainloop()
```
在这个程序中,我们首先定义了一个名为`draw_tree`的递归函数,用于绘制递归树。这个函数接收五个参数:画布对象`canvas`、当前节点的坐标`(x, y)`、当前节点的长度`length`、当前节点的角度`angle`、当前节点的深度`depth`。当递归深度为0时,函数返回;否则,它会在当前节点和它的子节点之间绘制一条线,并分别递归调用自己来绘制子节点。
然后,我们定义了一个名为`draw`的函数,用于响应"Draw"按钮的点击事件。这个函数首先从输入框中获取递归深度,然后清空画布,并在画布中央绘制一条垂直线表示根节点。接着,它调用`draw_tree`函数来绘制递归树。
最后,我们创建了一个tkinter窗口,并在窗口中放置了一个画布和一个包含"Depth:"标签、输入框和"Draw"按钮的框架。当用户点击"Draw"按钮时,程序会调用`draw`函数来绘制递归树。
阅读全文