python递归(分形),具有无理值输出<=>输入,基于斐波那契/phi基础

标签 python iteration fibonacci fractals

我是编程新手,不知道如何看到这段代码实现,而无需手动编程迭代。我知道它应该/可以调用自身来继续算法,我只是无法弄清楚出如何。一个大问题是,每次增加“n”(当 n<2)时,输出都会比之前增加,所以我如何设置递归,以便返回将导致不断增加的“元组”。

我提前道歉,我不太清楚我想要做什么,但可以提供任何细节,而且在计算机编程方面我才刚刚开始爬行。

这是代码,我将根据请求发送它生成的图像(我尝试发布它,但我没有足够的“街头信誉”...... (我将第一个程序称为 x_sub_i)

from graphics import *
def fib(n):
  if n==0:
    return 0
  elif n==1:
    return 1
  else:
    return fib(n-1)+fib(n-2)

def f(n,k):
  x = k/2*((-1)**(n+1)*fib(n)*5**.5+(-1)**n*(fib(n+1)+fib(n-1)))
  return x

  def p(n,k):
   for i in range(1,n+1):
    pt = Point(i, f(i,k))
    pt.draw(win)
    print (f(i,k))   

from x_sub_i import *

def a(n,k):
  win = GraphWin('Fractal', 800, 600)
  win.setCoords(0.0,n,k,0.0)
  for i in range(1,n+1):
    x1 = f(i,k)
    pt = Point(x1,i)
    pt.draw(win)
    line1 = Line(pt,Point(f((i+1),k), i+1))
    line1.draw(win)
    print(x1)
    for j in range(1,i-1):
        x2 =f(j,k)
        x2 = x1 + x2
        pr = Point(x2,i)
        pr.draw(win)
        line2 = Line(pr,Point(f(j,k)+f(i+1,k), i+1))
        line2.setFill('black')
        line2.draw(win)
        print(x2)
        for h in range(1,j-1):
            x3 = f(h,k)
            x3 = x3 + x2
            ps = Point(x3,i)
            ps.draw(win)
            line3 = Line(ps,Point(f(h,k)+f(j,k)+f(i+1,k), i+1))
            line3.setFill('purple')
            line3.draw(win)
            print(x3)
            for m in range(1,h-1):
                x4 = f(m,k)
                x4 = x4 + x3
                pq = Point(x4,i)
                pq.draw(win)
                line4 = Line(pq,Point(f((m),k)+f(h,k)+f(j,k)+f(i+1,k), i+1))
                line4.setFill('blue')
                line4.draw(win)
                print(x4)
                for q in range(1,m-1):
                    x5 = f(q,k)
                    x5 = x5 + x4
                    pu = Point(x5,i)
                    pu.draw(win)
                    line5 = Line(pu,Point(f((q),k)+f(m,k)+f(h,k)+f(j,k)+f(i+1,k), i+1))
                    line5.setFill('red')
                    line5.draw(win)
                    print(x5)
                    for a in range(1,q-1):
                        x6 =f(a,k)
                        x6 = x5 + x6
                        pa = Point(x6,i)
                        pa.draw(win)
                        line6 = Line(pa,Point(f((q),k)+f(m,k)+f(h,k)+f(j,k)+f(a,k)+f(i+1,k), i+1))
                        line6.setFill('orange')
                        line6.draw(win)
                        print(x6)
                        for b in range(1,a-1):
                            x7 = f(b,k)
                            x7 = x7 + x6
                            pb = Point(x7,i)
                            pb.draw(win)
                            line7 = Line(pb,Point(f((q),k)+f(m,k)+f(h,k)+f(j,k)+f(a,k)+f(b,k)+f(i+1,k), i+1))
                            line7.setFill('green')
                            line7.draw(win)
                            print(x7)
                            for c in range(1,b-1):
                                x8 = f(c,k)
                                x8 = x8 + x7
                                pc = Point(x8,i)
                                pc.draw(win)
                                line8 = Line(pc,Point(f((q),k)+f(m,k)+f(h,k)+f(j,k)+f(a,k)+f(b,k)+f(c,k)+f(i+1,k), i+1))
                                line8.setFill('pink')
                                line8.draw(win)
                                print(x8)
                                for d in range(1,c-1):
                                    x9 = f(d,k)
                                    x9 = x9 + x8
                                    pd = Point(x9,i)
                                    pd.draw(win)
                                    line9 = Line(pd,Point(f((q),k)+f(m,k)+f(h,k)+f(j,k)+f(a,k)+f(b,k)+f(c,k)+f(d,k)+f(i+1,k), i+1))
                                    line9.setFill('grey')
                                    line9.draw(win)
                                    print(x9)

这是它用不同颜色生成的图像。如果您运行上面的代码并更改代码中分配的颜色,您应该会发现类似的结果。

![分形][1]

任何建议或帮助将不胜感激!我可以提供我所拥有的关于算法数学方面的任何和所有信息,这已经是我的宠物项目有一段时间了,我只想看到它高效且独立地运行。

谢谢;)

最佳答案

似乎您正在寻找一种方法来使“分形生成”循环递归。第一个循环看起来有些参数与其余参数略有不同;我留下了这个函数,并将其余的函数概括为一个辅助函数。尝试这样的事情:

def a(n,k):
  win = GraphWin('Fractal', 800, 600)
  win.setCoords(0.0,n,k,0.0)
  for i in range(1,n+1):
    x1 = f(i,k)
    pt = Point(x1,i)
    pt.draw(win)
    line1 = Line(pt,Point(f((i+1),k), i+1))
    line1.draw(win)
    print(x1)
    loop(i, k, x1, f(i+1, k), win, 0)

COLORS = ['black', 'blue', 'red', 'orange', 'purple', 'pink', 'grey']
def loop(i, k, x1, f1, win, count):
    if count>6: # termination condition
        return
    for j in range(1,i-1):
        fjk = f(j,k)
        x2 = fjk + x1
        pr = Point(x2,i)
        pr.draw(win)
        f2 = fjk + f1
        line2 = Line(pr, Point(f2), i+1))
        line2.setFill(COLORS[count])
        line2.draw(win)
        print(x2)
        loop(j, k, x2, f2, win, count+1)

关于python递归(分形),具有无理值输出<=>输入,基于斐波那契/phi基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28912076/

相关文章:

ruby - 斐波那契线

c - 为什么我无法正确打印第 47 个斐波那契数?

java - 堆栈中将存储多少调用?

python 和 ruby​​ - 有什么用呢?

python - 如何从mongodb中获取匹配的子文档?

python - Scapy:获取/设置数据包的频率或 channel

python - 如何自定义 Keras 图层名称并使其自动递增 layer.name

performance - 迭代 Scripting.Dictionary/Collection 对象

ruby - @things.each 或 5 次做 |t|

.net - Parallel.ForEach 比普通的 foreach 快吗?