Python极客项目编程(第2版)
上QQ阅读APP看书,第一时间看更新

1.3.2 递归

在函数drawKochSF()的下一部分中,使用递归将第1个片段分解成越来越小的片段。

  ❶ if d > 10:
        # 第1个片段
      ❷ drawKochSF(x1, y1, p1[0], p1[1], t)
        # 第2个片段
        drawKochSF(p1[0], p1[1], p2[0], p2[1], t)
        # 第3个片段
        drawKochSF(p2[0], p2[1], p3[0], p3[1], t)
        # 第4个片段
        drawKochSF(p3[0], p3[1], x2, y2, t)

首先确定了递归停止条件❶。如果d(线段AB的长度)大于10像素,就继续递归,这是通过调用函数drawKochSF() 4次实现的。每次调用drawKochSF()时,都传入了一组不同的参数,这些参数是根据构成片段的4条线段的端点坐标确定的,而这些端点坐标已在函数开头计算得到。例如,在❷处,为线段AP1调用了函数drawKochSF(),而此后几次函数调用分别针对的是线段P1P2P2P3P3B。在这些递归调用中,都将根据新的点A和点B坐标重复之前的计算,并判断d是否依然大于10像素,如果是就再次递归调用drawKochSF() 4次,以此类推。