如何处理和分解递归问题?

时间:2019-12-03 10:06:05

标签: java recursion

  

查找给定整数X可以表示为唯一自然数的第N次幂之和的方式。

     

例如,如果X=100N=2的解决方案将是3

     
      
  • 100 =(10 2 )=(6 2 + 8 2 )=(1 2 + 3 2 + 4 2 + 5 2 + 7 2
  •   

显然,递归解决方案将是这样,其中powerSum(100, 2, 1) = 3

static int powerSum(int X, int N, int num) {
    int iPower = (int) Math.pow(num,N);
    if (iPower > X)
        return 0;
    else if (iPower == X)
        return 1;
    // subproblem
    return powerSum(X, N, num+1) + powerSum(X - iPower, N, num+1);
}

如何得出这样一个优雅的解决方案?我看到了最终结果,但我不知道自己怎么想。我试图解决这个问题,而我的解决方案涉及到许多循环和复杂的逻辑。

我遍历了递归的在线资源,他们只讨论终止条件的要求以及其余逻辑如何调用自身。我在尝试决定诸如递归调用的结构,应返回的内容等方面遇到麻烦。

0 个答案:

没有答案