你会如何回答这个django面试问题?

use*_*632 7 python django

我最近为某个公司的预采访做了一个编程问题.问题是:

创建一个django应用程序,当然是测试驱动,向世界展示斐波纳契的序列.应用程序应采用索引号并显示生成的斐波纳契序列.此外,应该有一个页面显示最近生成的序列.此外,Fibonacci有点不耐烦,不想永远等待,所以请确保您采取措施确保您的网络服务器有效运行.

我想出了以下内容:

from django.views.generic.simple import direct_to_template
from django.http import Http404

LARGEST_SEQUENCE = [0,1] 
LARGEST = 1 
LATEST = []

def fib(n): 
    """Calculate the nth fibonacci sequence""" 
    global LARGEST
    if n > LARGEST: 
        while n > LARGEST: 
            next = LARGEST_SEQUENCE[LARGEST] + LARGEST_SEQUENCE[LARGEST-1] 
            #print 'appending ', next
            LARGEST_SEQUENCE.append(next)   
            LARGEST += 1  
        return LARGEST_SEQUENCE 
    else: 
        return LARGEST_SEQUENCE[0:n+1] 

def latest(request):
    results=[]
    for n in LATEST:
        result = fib(n)
        results.append((n,result))
    return direct_to_template(request, 'latest.html', {'results':results})

def index(request):
    if request.method=="POST":
        try:
            n=int(request.POST.get('n'))
        except:
            return Http404
        result = fib(n)
        if len(LATEST) >=  5:
            LATEST.pop()
        LATEST.insert(0,n)
    else:
        result = None
    return direct_to_template(request, 'base.html', {'result':result})
Run Code Online (Sandbox Code Playgroud)

"最新"视图是我的第二个版本,因为第一个版本不能始终如一地工作.原始版本将结果存储在LATEST中的"index"中.LATEST最初是一个fib序列(列表)列表,而不是N的最近值列表.

我想我的主要问题是,在views.py文件中存储运行时生成的最大fib序列是不是很糟糕?我知道这不是持久性的,但指令从未真正详细说明应如何完成任务.你们有什么想法,你们将如何处理这个问题?

多谢你们!

Pet*_*nov 4

每个线性递推方程都可以直接求解。在斐波那契的情况下,方程是

f_n+2 = f_n+1 + f_n
f_1 = 1
f_2 = 1
Run Code Online (Sandbox Code Playgroud)

解决这个问题的方法是:

f_n = 1/sqrt(5) * ((1+sqrt(5))/2)^n - 1/sqrt(5) * ((1-sqrt(5))/2)^n
Run Code Online (Sandbox Code Playgroud)

使用这个直接公式。要了解如何实现它,请寻找线性递推方程求解。例如这里

由于浮点错误,您应该将结果四舍五入到最接近的整数。