实现以多个切片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_frac
和scale
做了什么,但这些代码是给我的。
我的问题实际上围绕着一种设置递归初始输入的方式,以便在进程循环时不会受到影响。
答案 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);
}