我是编程新手,不知道如何看到这段代码实现,而无需手动编程迭代。我知道它应该/可以调用自身来继续算法,我只是无法弄清楚出如何。一个大问题是,每次增加“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/