Aqui vai um código eficiente em Python (fast doubling) para calcular o n-ésimo termo de Fibonacci considerando F(0)=0 e F(1)=1:
def fib(n: int) -> int:
"""
Retorna o n-ésimo termo da sequência de Fibonacci com F(0)=0 e F(1)=1.
Usa o método de fast doubling em O(log n).
"""
if n < 0:
raise ValueError("n deve ser inteiro não negativo")
def _fib(k: int):
if k == 0:
return (0, 1) # (F(k), F(k+1))
a, b = _fib(k >> 1)
c = a * (2 * b - a)
d = a * a + b * b
if k & 1:
return (d, c + d)
else:
return (c, d)
return _fib(n)[0]
# Exemplo de uso:
if __name__ == "__main__":
n = int(input("Digite n (F(0)=0, F(1)=1): "))
print(f"F({n}) = {fib(n)}")
Observação: se você quiser a convenção F(1)=1, F(2)=1, basta chamar fib(n-1). Por exemplo, para obter F(1)=1 nessa convenção, use fib(0).