使用Python编程处理极大数字

时间:2016-11-12 12:02:46

标签: python algorithm recursion

当我们谈论代码的复杂性时,我们大多数时候会考虑输入的数量。通常我们不太考虑铺设硬件实现。为了在代码的复杂性和我们的算法(代码)组成的输入数量之间建立连接,我们通常使用Big_O表示法。循环是实现算法的必要条件,但它具有O(n)复杂度,这意味着时间将随输入数量线性增长,因此大量输入效率低下。但我们可以通过递归替换循环原因递归总是有O(log n)时间复杂度。我不打算在这里澄清它。从以上所有这些但我想说递归比循环

更有效

以及任何可以循环的东西我们都可以通过递归更有效地做同样的事情。

所以我从Project Euler.net致电self powers

找到了一个问题

以下是我的问题

系列赛,11 + 22 + 33 + ... + 1010 = 10405071317。 找到该系列的最后十位数字,11 + 22 + 33 + ... + 10001000。

这个问题似乎很容易,所以我实现了我的代码来自Python,它的可以顺利地用于少数的数字范围,但获得1000到1000的功率以及以上所有的总和python通常显示错误(因为数字非常大,足以在python的内存流中发生)所以我如何得到答案。以下是我的代码

def f(n):
    if n==1:
        return 1
    else:
        return n**n+f(n-1)

所以我的问题是我如何解决这个问题,以及如何处理那些极其庞大的数字,我如何管理那些将在大量整数上发生的异常请提及良好的激励算法?

1 个答案:

答案 0 :(得分:0)

没有任何东西可以使递归本身更有效率。此外,由于函数调用开销,使用递归实现的相同算法可能 less 有效。更糟糕的是,这正是你的情况,使用大深度的递归可能会导致堆栈溢出(没有双关语意)。除非正在使用尾递归优化,否则不在Python中。

Python对整数数字大小没有任何限制(在合理范围内),这不是问题。使用循环重新实现该功能,你会做得很好。除了n ** n没有做你认为它做的事情。