Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计算三维i-j-k网格图的边数的递归算法是什么?_Algorithm_Recursion_Graph_Grid - Fatal编程技术网

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

Algorithm 计算三维i-j-k网格图的边数的递归算法是什么?,algorithm,recursion,graph,grid,Algorithm,Recursion,Graph,Grid,最终的解等于(i-1)jk+(k-1)ij+(j-1)ki。我的想法是创建一个函数来计算平行于任一轴的边数i,j,k。假设我们调用函数通过calc\u 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,并通过另一个函数calc_total调用另一个函数,来调用对平行于轴j和k的边进行计数的

最终的解等于
(i-1)jk+(k-1)ij+(j-1)ki
。我的想法是创建一个函数来计算平行于任一轴的边数
i,j,k
。假设我们调用函数通过
calc\u 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,并通过另一个函数calc_total调用另一个函数,来调用对平行于轴j和k的边进行计数的函数

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
但我根本不知道你的方法