【问题标题】:python recursion (fractal) with irrational value output<=>input, based on fibonacci / phi basispython递归(分形)与非理性值输出<=>输入,基于fibonacci / phi基础
【发布时间】:2015-03-07 06:26:56
【问题描述】:

我是编程新手,不知道如何看到这段代码实现,而不必手动对迭代进行编程。我知道它应该/可以调用自身来继续算法,我只是想不通出如何。一个大问题是“n”每增加一次(当 n

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

这是代码,我会根据要求发送它生成的图像(我试图发布它,但我没有足够的“街头信誉”... (我称这第一个程序为 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]

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

谢谢;)

【问题讨论】:

  • 由于您不能在帖子中包含图片,您可以编辑您的帖子以包含指向图片的链接吗?我还想从高层次的角度了解更多关于算法的信息。仅通过查看代码很难判断代码应该做什么。这个分形有一个名称或众所周知的算法,您可以将我们链接到吗?
  • 使用一个字母的变量名不是一个好主意,因为它很难告诉你代码应该做什么——对你和其他人一样。如果你把它放在一边,一个月后再回来,你将不知道你想要完成什么。无论如何,这里似乎需要一个递归函数。
  • graphics 模块...你能给你正在使用的graphics 模块提供参考吗?
  • ...x_sub_i 模块也无处可寻,我投降:祝你的问题好运
  • 对不起,前两段代码是x_sub_i,如下所示。

标签: python iteration fibonacci fractals


【解决方案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)

【讨论】:

    猜你喜欢
    • 2015-07-24
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多