def recorrência_linear(valores_base,coeficientes,fun=lambda _:0,até=20): """ recorrência_linear([base_0,base_1,...,base_{k-1}],[a_1,a_2,...,a_k], até) é a função dada pela recorrência n = 0 => F(n) = base_0 n = 1 => F(n) = base_1 ... n = k-1 => F(n) = base_{k-1} n >= k => F(n) = [(a_1 * F(n-1)) + (a_2 * F(n-2)) + ... + (a_k * F(n-k))] + fun(n) Os resultados de F(0), F(1), ... , F(até) são impressos. """ assert len(coeficientes) == len(valores_base), "Forneça uma quantidade de casos bases igual à ordem da recorrência!" contagem = len(coeficientes)-1 L = len(coeficientes) calculados = valores_base.copy() for i,val in enumerate(calculados[:até]): print(f'{i} -> {val}\t\t[base]') calculados = list(reversed(calculados)) while contagem < até: contagem += 1 novo = fun(contagem) for coef,val in zip(coeficientes,calculados): novo += coef*val calculados[0], calculados[1:] = novo, calculados[:-1] print(f'{contagem} -> {calculados[0]}',end='\t\t') if L > 1 and calculados[1] != 0: print(f'[{calculados[0]/calculados[1]}]',end='') print()