一张不够花、 发表于 2023-5-11 22:16:27

求助大神

输出斐波那契数列的前20项,并画一个由数列中的数构成的螺旋线。

isdkz 发表于 2023-5-11 22:16:55

下面是 Python 代码实现:

import turtle

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

# 输出斐波那契数列的前20项
for i in range(20):
    print(fibonacci(i), end=' ')

# 画螺旋线
turtle.speed(0)
turtle.penup()
turtle.goto(0, 0)
turtle.pendown()
x, y = 0, 0
for i in range(20):
    turtle.goto(x, y)
    x += fibonacci(i+1)
    y += fibonacci(i)
    turtle.goto(x, y)

turtle.done()


这里使用了递归函数来计算斐波那契数列,然后使用 Turtle 库来画出螺旋线。其中turtle.speed(0)表示画笔的速度最快, turtle.penup()表示抬起画笔, turtle.pendown()表示放下画笔, turtle.goto(x, y)表示将画笔移动到坐标为(x, y)的位置。

一张不够花、 发表于 2023-5-11 22:26:31

isdkz 发表于 2023-5-11 22:16
下面是 Python 代码实现:



大神 为啥输出的不是螺旋线啊

isdkz 发表于 2023-5-11 22:42:36

一张不够花、 发表于 2023-5-11 22:26
大神 为啥输出的不是螺旋线啊

用matplotlib画图比较专业

斐波那契数列的前20项如下:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765

因为我是一个文本模型,所以无法直接生成图像。但是我可以给你一个使用Python和matplotlib库生成斐波那契螺旋的代码示例:

import matplotlib.pyplot as plt
import numpy as np

# 定义斐波那契数列
def fibonacci(n):
    fib_seq =
    while len(fib_seq) < n:
      fib_seq.append(fib_seq[-1] + fib_seq[-2])
    return fib_seq

# 生成斐波那契螺旋
def fibonacci_spiral(n):
    fib_seq = fibonacci(n)
    directions = [(1, 0), (0, 1), (-1, 0), (0, -1)]# 右,上,左,下
    x, y = 0, 0
    spiral_points = [(x, y)]

    for i in range(n):
      dx, dy = directions
      for _ in range(fib_seq):
            x, y = x + dx, y + dy
            spiral_points.append((x, y))

    return spiral_points

# 绘制斐波那契螺旋
def plot_spiral(n):
    points = fibonacci_spiral(n)
    xs, ys = zip(*points)
    plt.figure(figsize=(8, 8))
    plt.plot(xs, ys, 'b-')
    plt.show()

# 绘制前20项的斐波那契螺旋
plot_spiral(20)


运行这段代码,你就能得到一个根据斐波那契数列生成的螺旋图形。注意你需要先安装matplotlib和numpy这两个Python库,如果还没有安装,可以通过以下命令安装:

pip install matplotlib numpy


请注意,上述代码并不完全精确地模拟自然中的斐波那契螺旋,这需要使用黄金分割和极坐标来实现。但它确实以一种简单的方式显示了斐波那契数列的螺旋性质。

陶远航 发表于 2023-5-13 01:13:44

输出斐波那契数列的前20项:
fibonacci =
for i in range(2, 20):
    fibonacci.append(fibonacci + fibonacci)
print(fibonacci)

画一个由数列中的数构成的螺旋线:
import turtle

# 计算斐波那契数列前20项
fibonacci =
for i in range(2, 20):
    fibonacci.append(fibonacci + fibonacci)

# 绘制螺旋线
turtle.speed(0) # 设置速度为最快
turtle.penup() # 抬起笔
turtle.goto(0, 0) # 去到原点
turtle.pendown() # 落下笔
for i in range(2, 22):
    turtle.forward(fibonacci*5) # 移动距离
    turtle.left(90 if i%4==0 else -90) # 转向
turtle.done()
页: [1]
查看完整版本: 求助大神