递归解决系列总和问题的运行时错误挂起(SIGHUP)

问题描述 投票:0回答:1

问题:

给定一个 int N,使用递归计算序列 13+23+33+43......的总和,直到第 n 项(问题链接

Python 实现的解决方案:

#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++ 中使用递归来解决同样的问题,但它没有出现任何错误

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 recursion runtime-error
1个回答
0
投票

由于Python代码需要太多时间才能完成,在线裁判主机关闭了终端。

这并不意外。 Python 代码通常比 C++ 运行得慢,这解释了为什么它可能发生在 Python 代码上,而不是类似的 C++ 代码上。

请注意挑战并没有建议您应该使用递归来解决这个问题。由于

n
的最大范围是 50000,因此您应该拒绝在这里应用递归的想法。此外,挑战要求实现时间复杂度为 O(1) 的解决方案。

以下是有关如何执行此操作的提示:

第 n 个三角形数的平方。

如果这还不足以编写 O(1) 解决方案,这里有一个剧透:

return (n*(n+1)//2)**2

© www.soinside.com 2019 - 2024. All rights reserved.