Recursion 迭代定义深度的递归分割
我有两个顶点(a)和(b),我想在它们的中点递归地分割它们 模式如下所示:Recursion 迭代定义深度的递归分割,recursion,split,tree,iteration,depth,Recursion,Split,Tree,Iteration,Depth,我有两个顶点(a)和(b),我想在它们的中点递归地分割它们 模式如下所示: a_b = self.abfn( a, b) ab_b = self.abfn( a_b, b) a_ab = self.abfn( a, a_b) abb_b = self.abfn(ab_b, b) ab_abb = self.abfn( a_b, ab_b) a_aab = self.abfn( a, a_
a_b = self.abfn( a, b)
ab_b = self.abfn( a_b, b)
a_ab = self.abfn( a, a_b)
abb_b = self.abfn(ab_b, b)
ab_abb = self.abfn( a_b, ab_b)
a_aab = self.abfn( a, a_ab)
aab_ab = self.abfn(a_ab, a_b)
对于这个特定的深度,我可以这样写:
a_b = self.abfn( a, b)
ab_b = self.abfn( a_b, b)
a_ab = self.abfn( a, a_b)
abb_b = self.abfn(ab_b, b)
ab_abb = self.abfn( a_b, ab_b)
a_aab = self.abfn( a, a_ab)
aab_ab = self.abfn(a_ab, a_b)
然而,我想写它,这样我可以定义一个深度,并重复拆分到该深度。
需要注意的是,我不想使用递归函数
如何以这种方式进行迭代
我正在使用python,但语言并不重要。您可以使用以下代码:
def midpoint(a, b):
return ((a[0] + b[0]) / 2, (a[1] + b[1]) / 2)
def abfn(a, b, depth):
vertices = [a, b]
for _ in range(depth):
nextlevel = vertices[:1]
for a, b in zip(vertices, vertices[1:]): # all consecutive pairs
mid = midpoint(a, b)
nextlevel.extend((mid, b))
vertices = nextlevel
return vertices
示例调用:
a = (0, 100)
b = (0, 200)
vertices = abfn(a, b, 2)
print(vertices)
输出:
[(0, 100), (0.0, 125.0), (0.0, 150.0), (0.0, 175.0), (0, 200)]
你在图形中使用的数据结构是什么?@trincot我正在使用一个具有基本笛卡尔坐标的api——顶点就是(x,y)。基本上只是元组的python列表。这回答了你的问题吗?x从左到右排序,y从下到上排序,所以节点由数字标识(是x和y数字吗?)是的,只是x,y元组,这很有效,太棒了!修复了图像和upvote/accept。谢谢。我听说递归调用比较慢,而且调试起来非常困难,但在如何正确地循环它的问题上遇到了难题。在这种情况下,递归实现不会太慢(如果有的话),但由于递归只不过是所谓的“尾递归”,因此迭代方法在这里并不太牵强。当您有一个递归算法在递归的每个阶段进行两个(或更多)递归调用时,情况就完全不同了。在这种情况下,一个迭代等价物将需要使用一个显式堆栈来实际模拟递归方法。。。这可以用简单的向量数学而不是递归来完成吗?
middpoint
函数就是我所说的向量数学,所以你可能会问,它是否可以不用递归来完成?是的,它可以。您可以得到2^个相同大小的深度段,因此您也可以迭代地执行此操作。