在三维i-j-k网格图中,计算边数的递归算法是什么



最终解将等于(i-1)jk + (k-1)ij + (j-1)ki。我的想法是创建一个函数,计算平行于任一轴i, j, k的边数。假设我们调用函数来计算由calc_i平行于轴i的边。

calc_i(i,j,k):
if(k==1)
return i(j-1)+j(i-1)
return calc_i(i,j,k-1)+calc_i(i,j,1)

我们可以通过简单地将i,j,k输入参数更改为函数calc_i来调用其他计算平行于轴j和k的边的函数,并通过另一个函数calc_total 来调用它

calc_total(i,j,k):
return (calc_i(i,j,k) + calc_i(j,k,i) + calc_i(k,i,j))/2

然后,在调用三个函数之后,我们将得到结果k(i(j-1)+j(i-1)) + j(i(k-1)+k(i-1))+i(j(k-1)+k(j-1))。把最后的结果除以二,我们最终会得到想要的答案。

问题:有没有一种可能的方法可以将这三个函数calc_i ,calc_j ,calc_k组合成一个简单的递归函数,从而得到与上面相同的结果?

要回答你的问题,我必须说是的,你可以用这样的东西:

calc(i,j,k)
if(i == 1) 
return k(j-1)+j(k-1)
if(j == 1) 
return k(i-1)+i(k-1)
if(k == 1) 
return i(j-1)+j(i-1)
a = calc(i,j,k-1)+calc(i,j,1)
b = calc(i,j,k-1)+calc(i,j,1)
c = calc(i,j,k-1)+calc(i,j,1)
return a+b+c

但我一点也不了解你的做法!

最新更新