使用递归,是否可以将初始输入设置为固定字母,以便在进程循环时不会受到影响?

时间:2016-08-31 02:57:45

标签: python

实现以多个切片n和一个符文作为参数的函数树,并生成一堆符文(形状)缩放并叠加在彼此之上。

顶部的形状必须是原始形状大小的1 / n。第二层的形状必须是原始形状大小的2 / n,依此类推。即底部的形状是原始形状。

所以我尝试使用数学归纳的一些想法以递归的方式做到这一点。

def tree(n, shape):
    a = n
    if n == 1:
        return scale(1/a, shape)
    else:
        return overlay_frac((n-1)/n, tree(n-1, shape) , scale(n/a, shape))

我的问题是如何修复n的初始值,因为此递归会不断改变值?我无法在递归之外设置a = n,因为函数中定义了n

我有办法将n的初始值设置为另一个字母,这样就不会改变吗?

现在我甚至不确定这段代码是否有效。但是无法修复它,我无法测试它。

仅供参考:我知道你们可能不知道overlay_fracscale做了什么,但这些代码是给我的。

我的问题实际上围绕着一种设置递归初始输入的方式,以便在进程循环时不会受到影响。

2 个答案:

答案 0 :(得分:1)

你可以做的是添加第三个参数来跟踪原始大小,并让你的overlay_frac()函数中的参数基于该变量,这样这些值在递归时不会改变。这是我如何做到的:

def tree(n, initial_size, shape):
    a = initial_size
    if n == 1:
        return scale(1/a, shape)
    else:
        return overlay_frac((n-1)/a, tree(n-1, initial_size, shape), \
                            scale(n/a, shape))

答案 1 :(得分:1)

添加另一个参数当然是一个可行的选择。如果您遇到某些约束并且无法更改为外部函数定义的形式参数,您也可以考虑使用辅助函数。

function tree(n, rune){
    function drawTree(i) {
        if (i === 1) {
            return rune;
        } else {
            return overlay_frac(1 / k, scale((1 + n - i)/ n, rune),
                drawTree(i - 1));
        }
    }
    return drawTree(n);
}