试图理解利维曲线(分形)

2024-10-01 15:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我被要求实现一个递归函数,它以一个非负整数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'

我对这个很陌生,我不知道如何开始:

到目前为止我只得到:

^{pr2}$

我需要一些好的建议。在


Tags: gt信息编码定义字母指令usage整数
2条回答

由于Levy CL system只有一个规则,所以使用单个replace方法构建结果字符串非常简单。在

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)

结果:

^{pr2}$

通过想象图形中的每条直线被两条以90度角连接的较小的线代替,可以形象地看到这种替换。是这样的:

enter image description here

首先,如果这就是问题所在:一个大的Levy曲线(递归情况)是通过安排两个较小的曲线“穿过房间”来构建的,而另外两个“在地板上”面朝上,介于两者之间。小的Levy曲线(基本情况)只是一条直线。因此,基本情况是:

def lev(n):
    if n == 0:
        return 'F'
    else:
        # Recursive case here

但是对于递归的情况,只需调用lev(n-1)。你是对的,你需要这样做,但你需要做四次,并在其间轮流。这将创建所需的“两条相对较小的曲线,中间有两条”。在

仔细检查曲线(这里:https://en.wikipedia.org/wiki/File:Levy_C_construction.png),我们看到我们需要画一条曲线,然后右转,再画另一条,然后完全掉头,然后画第三条曲线,最后右转,画出最后一条曲线。在

这可以相当简单地完成:

^{pr2}$

相关问题 更多 >

    热门问题