Вычисление чисел Фибоначчи: различия между версиями

Содержимое удалено Содержимое добавлено
Для Python результат деления - дробное число, поэтому при n == 1 результат "Уменьшаем степень вдвое" в виде n/=2 будет приводить к результату n == 0.5 и следовательно бесконечному циклу.
м <source> -> <syntaxhighlight> (phab:T237267)
Строка 9:
 
Приведем [[C++]] — код этой функции:
<sourcesyntaxhighlight lang="cpp">
//Внимание: функция имеет экспоненциальное время выполнения и неэффективно использует стэк.
//Функция возвращает n-e число Фибоначчи по данному n.
Строка 17:
return fib(n - 1) + fib(n - 2);
}
</syntaxhighlight>
</source>
 
== Решение с помощью динамического программирования ==
Строка 23:
 
Код функции, реализующий восходящее ДП:
<sourcesyntaxhighlight lang="cpp">
//возвращает n-e число Фибоначчи
int fib_n(int n)
Строка 36:
return dp[n];
}
</syntaxhighlight>
</source>
 
Код функции на Python, возвращающий последовательность чисел с помощью списка:
<sourcesyntaxhighlight lang="Python">
def fibo(n):
f = [0, 1]
Строка 48:
n = 10
fibo(n) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
</syntaxhighlight>
</source>
 
== Элегантное решение ==
Строка 54:
 
Приведем С++ — код:
<sourcesyntaxhighlight lang="cpp">
//возвращает n-е число Фибоначчи
int fib_n(int n)
Строка 69:
return y;
}
</syntaxhighlight>
</source>
 
Приведем Python — код:
<sourcesyntaxhighlight lang="python">
# возвращает последовательность чисел
def fibo(n):
Строка 85:
n = 10
fibo(n) # 0 1 1 2 3 5 8 13 21 34 55
</syntaxhighlight>
</source>
 
== Решение быстрым возведением матрицы в степень ==
Строка 101:
:: <math>R = \begin{pmatrix} rc & rd \end{pmatrix}</math> — вектор результатов (вторая строка матрицы <math>P^n</math>), инициализируется как вторая строка единичной матрицы.
 
<sourcesyntaxhighlight lang="c">
//возвращает n-е число Фибоначчи
int fib(int n)
Строка 132:
return rc;
}
</syntaxhighlight>
</source>
 
То же на языке Python:
<sourcesyntaxhighlight lang="python" line="1">
#возвращает n-е число Фибоначчи
def fib(n):
Строка 160:
n >>= 1 #Уменьшаем степень вдвое
return rc
</syntaxhighlight>
</source>
{{Темы|Программирование|Математический анализ}}