查找给定整数
X
可以表示为唯一自然数的第N
次幂之和的方式。例如,如果
X=100
和N=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); }
如何得出这样一个优雅的解决方案?我看到了最终结果,但我不知道自己怎么想。我试图解决这个问题,而我的解决方案涉及到许多循环和复杂的逻辑。
我遍历了递归的在线资源,他们只讨论终止条件的要求以及其余逻辑如何调用自身。我在尝试决定诸如递归调用的结构,应返回的内容等方面遇到麻烦。