用python求等比数列前n项和,用python数列求和

  用python求等比数列前n项和,用python数列求和

  本文的要点在于使用了Python的内置函数int(),所以在计算几何级数的前n项之和时没有使用数学公式sn=a1 * (1-q n)/(1-q)。

  一般遇到这样的问题,很容易想到用循环来实现。以1 2 4 8 16为例.2 ^ 199为例,即计算比例q=1且序列中第一项a1=1的几何级数前200项之和:

  s=0

  对于范围内的I(200):

  s=2**i

  s

  1606938044258990275541962092341162602522202993782792835301375

  这样的代码散发着浓浓的C语言味道,不够Pythonic化。如果使用Python的内置函数sum()和生成器派生,下面的代码看起来更舒服:

  sum((2**i for i in range(200)))

  1606938044258990275541962092341162602522202993782792835301375

  代码确实简单很多,但实际上这行代码的内部工作原理和上面的循环代码是一样的,所以运行效率一点也没有提高。

  如果换个思路,可以发现问题中给出的求和公式和二进制转换成十进制时的展开公式是一模一样的。想通了这一点,就可以使用内置函数int()快速计算几何级数求和公式。

  内置函数int()用于将其他形式的数字转换为整数。它要求参数是整数、实数或合法的数字字符串。当参数是数字字符串时,它还允许指定第二个参数基来解释数字字符串的十进制系统。其中,base的值应为0或2到36之间的整数,其中0表示数字字符串的字面意义所隐含的十进制转换。

  int(1*200,2)

  1606938044258990275541962092341162602522202993782792835301375

  结果完全正确,那么效率会提高吗?下面这张操作截图完美回答了这个问题。

  是的,运营效率提高了几百倍,所以这个想法很有意义。不幸的是,这种方法有一个小问题。由于函数int()的限制,第二个参数只能是0或2到36之间的整数,不适用于比值q为小数或大于36的情况。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: