如何创建一个允许我在列表中存储值的函数?

时间:2016-09-09 00:44:28

标签: function

我需要创建一个python函数,它将以递归方式将fibonacci值存储在列表中,然后将该列表返回给我。然后,我可以打印该列表。这就是我所拥有的。

def recFib(x):
    result = []

    if x == 1:
        return result.append(1)

    if x == 2:
        return result.append(2)

    for i in range(2,x):
        result.append(recFib(i-1)+recFib(i-2))

    return result

我是Python的新手,所以很多概念对我来说都是新的,我似乎无法弄清楚我做错了什么。

3 个答案:

答案 0 :(得分:1)

这是基于@ Akavall's anwer的解决方案

def recFib(x):
    fibArray = [0, 1]
    def fib(x):
        if x < len(fibArray):
            return fibArray[x]
        temp = fib(x - 1) + fib(x - 2)
        fibArray.append(temp)
        return temp

    return fib(x)

答案 1 :(得分:0)

您的代码存在一些问题,例如:

return result.append(1)

将返回None,而不是result并附加1

另外,

def recFib(x):
    result = []

每次调用[]时都会将结果设置为recFib,我认为这不是你想要的。

我不确定我理解你的整个逻辑,对不起。

可能的解决方案是这样的:

def recFib(x):
    n_to_fib = {0: 0, 1: 1}
    def fib(x):
        if x in n_to_fib:
            return n_to_fib[x]
        temp = fib(x - 1) + fib(x - 2)
        n_to_fib[x] = temp
        return temp

    return fib(x)

if __name__ == "__main__":
    result = [recFib(i) for i in range(8)]

    print result

结果:

[0, 1, 1, 2, 3, 5, 8, 13]

计算新值很快,因为先前的值存储在n_to_fib dict中,因此不必重新计算。

我们还可以修改recFib以直接返回列表:

fib(x)
return sorted(n_to_fib.values())

而不是:

return fib(x)

答案 2 :(得分:0)

试试这个:

std::find_if()

该计划的关键在于:

def recFib(n):
    if n == 1:
        return [0]
    elif n == 2:
        return [0, 1] 
    else:
        a = recFib(n-1)
        return a + [a[-1] + a[-2]]

以下是return a + [a[-1] + b[-1]] a # This gets the most recently created list, since it's `recFib(n-1)` + # Append to the next list (but does not return `None`) [ a[-1] # Last value of `recFib(n-1)`, which is the previous value. + # Add to a[-2]] # Second last value of `recFib(n-1)`, which is the second previous value. 的断点:

recFib(5)

它不需要两个功能。我发现这是作弊:

n =  3
a[-1]:  1
a[-2]:  0
n =  4
a[-1]:  1
a[-2]:  1
n =  5
a[-1]:  2
a[-2]:  1
[0, 1, 1, 2, 3]

通过循环递归函数生成列表效率非常低。每次使用该函数时,都会重新计算整个序列。