Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于计算序列第n个元素的脚本_Python_Sequence - Fatal编程技术网

Python 用于计算序列第n个元素的脚本

Python 用于计算序列第n个元素的脚本,python,sequence,Python,Sequence,我试图编写一些代码来计算序列的第n个元素 a_i = 2 * a_i-1 + 1 for i > 0, where a_0 = 1. 我理解这个公式是如何工作的,以及如何用Python实现它 我只是不知道如何找到第n个元素的公式 我已经有一段时间没上第二课了 我知道有一种方法可以找到配方,所以如果有人有任何建议,我将不胜感激 我会发布一些代码,但我知道这是错误的,并且没有计算第n个元素 到目前为止,我只是对每个元素进行硬编码。所以,正如我所说,一旦我知道了找到第n个元素的公式,我就可以编

我试图编写一些代码来计算序列的第n个元素

a_i = 2 * a_i-1 + 1 for i > 0, where a_0 = 1.
我理解这个公式是如何工作的,以及如何用Python实现它

我只是不知道如何找到第n个元素的公式

我已经有一段时间没上第二课了

我知道有一种方法可以找到配方,所以如果有人有任何建议,我将不胜感激

我会发布一些代码,但我知道这是错误的,并且没有计算第n个元素


到目前为止,我只是对每个元素进行硬编码。所以,正如我所说,一旦我知道了找到第n个元素的公式,我就可以编写代码了。

你不需要直接给出第n个元素的公式。计算第一个元素,然后计算第二个元素,以此类推,直到得到第n个元素。

您不需要直接给出第n个元素的公式。计算第一个元素,然后计算第二个元素,以此类推,直到得到第n个元素。

这可以通过一个非常简单的递归函数来完成:

def a(i):
    if i == 0:
        return 1
    return 2 * a(i - 1) + 1
当然,如果您需要一个类似[ai for i in range1000]的列表,您不希望函数重新计算a0、a1、…、an-2、an-1以计算所有n的an,因此您需要一个缓存:

import functools 

@functools.lru_cache(None)
def a(i):
    ...  # do the thing

这可以通过一个非常简单的递归函数来实现:

def a(i):
    if i == 0:
        return 1
    return 2 * a(i - 1) + 1
当然,如果您需要一个类似[ai for i in range1000]的列表,您不希望函数重新计算a0、a1、…、an-2、an-1以计算所有n的an,因此您需要一个缓存:

import functools 

@functools.lru_cache(None)
def a(i):
    ...  # do the thing

首先,观察a_0=1=2**0+1-1

现在,通过归纳法:

a_i=2*a_i-1+1=2*2**i-1+1-1+1=2**i+1-1

这将为您提供一个封闭形式的解决方案:

>>> def a(i):
...   return 2**(i+1) - 1
...
>>> [a(i) for i in range(10)]
[1, 3, 7, 15, 31, 63, 127, 255, 511, 1023]

首先,观察a_0=1=2**0+1-1

现在,通过归纳法:

a_i=2*a_i-1+1=2*2**i-1+1-1+1=2**i+1-1

这将为您提供一个封闭形式的解决方案:

>>> def a(i):
...   return 2**(i+1) - 1
...
>>> [a(i) for i in range(10)]
[1, 3, 7, 15, 31, 63, 127, 255, 511, 1023]

哇!谢谢大家!!老实说,我甚至没有想过使用递归公式。谢谢大家!哇!谢谢大家!!老实说,我甚至没有想过使用递归公式。谢谢大家!