我被要求实现一个递归函数,它以非负整数n作为输入并返回用字母L,R和F编码的turtle指令,其中L表示向左旋转45度,R表示向右旋转45度,F表示向前旋转.
附加信息我有:对于每个非负整数n> 0,Levy曲线L(n)可以用Levy曲线定义L(n-1); Levy曲线L(0)只是一条直线.
usage:
>>> lev(0)
'F'
>>> lev(1)
'LFRRFL'
Run Code Online (Sandbox Code Playgroud)
我对此很新,我不知道如何开始:
到目前为止我只得到:
from turtle import Screen, Turtle
def lev(n):
# base case
if n ==0:
return 'F'
# recursive case
else:
return lev(n-1)
Run Code Online (Sandbox Code Playgroud)
我在这里需要一些好的指示.
由于Levy C的L系统只有一个规则,因此使用单个替换方法构建结果字符串很简单.
def lev(n):
if n == 0:
return "F"
else:
symbols = lev(n-1)
return symbols.replace("F", "LFRRFL")
for i in range(4):
print lev(i)
Run Code Online (Sandbox Code Playgroud)
结果:
F
LFRRFL
LLFRRFLRRLFRRFLL
LLLFRRFLRRLFRRFLLRRLLFRRFLRRLFRRFLLL
Run Code Online (Sandbox Code Playgroud)
您可以通过想象图中的每条直线被两条以90度角连接的较小线代替来可视化这种替换.像这样:
