给定一个 int N,使用递归计算序列 13+23+33+43......的总和,直到第 n 项(问题链接)
#User function Template for python3
class Solution:
def sumOfSeries(self,n):
#code here
if n>0:
return (n*n*n) + self.sumOfSeries(n-1)
else:
return 0
#{
# Driver Code Starts
#Initial Template for Python 3
if __name__=='__main__':
t=int(input())
for _ in range(t):
N=int(input())
ob=Solution()
print(ob.sumOfSeries(N))
# } Driver Code Ends
该解决方案适用于小输入,但会给出上述大值(如 18468)的错误
我无法理解错误的含义以及导致该错误的原因
我尝试在 C++ 中使用递归来解决同样的问题,但它没有出现任何错误
//{ Driver Code Starts
// Initial template for C++
#include <bits/stdc++.h>
using namespace std;
// } Driver Code Ends
// User function template for C++
class Solution {
public:
long long sumOfSeries(long long n) {
// code here
if (n==1)
return 1;
else
return (n*n*n)+sumOfSeries(n-1);
}
};
//{ Driver Code Starts.
int main() {
int t;
cin >> t;
while (t--) {
long long N;
cin >> N;
Solution ob;
cout << ob.sumOfSeries(N) << "\n";
}
}
// } Driver Code Ends
由于Python代码需要太多时间才能完成,在线裁判主机关闭了终端。
这并不意外。 Python 代码通常比 C++ 运行得慢,这解释了为什么它可能发生在 Python 代码上,而不是类似的 C++ 代码上。
请注意挑战并没有建议您应该使用递归来解决这个问题。由于
n
的最大范围是 50000,因此您应该拒绝在这里应用递归的想法。此外,挑战要求实现时间复杂度为 O(1) 的解决方案。
以下是有关如何执行此操作的提示:
第 n 个三角形数的平方。
如果这还不足以编写 O(1) 解决方案,这里有一个剧透:
return (n*(n+1)//2)**2