Мне нужна помощь, чтобы понять анализ рекурсивных алгоритмов. Я быстро сделал этот алгоритм, и хотел бы знать, что сложность:Анализ сложной простой рекурсивной функции
int FunctionExampple(A1, A2, ... An)
{
product = 1;
if(n == 2)
{
product = multi(A1, A2);
}
else
{
product = multi(A1, FunctionExample(A2, A3, ..., An));
}
return product;
}
Теперь предполагая, что функция мульти занимает O времени (п^1,59), что бы сложность? Остается ли это O (n^1.59) или будут ли рекурсивные вызовы сделать O (n^1.59 * n) для учета количества рекурсивных вызовов? Спасибо, парни.
PS: Я просто написал это быстро, а синтаксис и все это не имеет значения.
Умножение дает тот же размер, что и его вход. Итак, по тому, что вы сказали, алгоритм не будет принимать O (n^1,59) раз, а скорее нечто большее (O (k * n^1.59)? – Tesla
Если «n» (количество аргументов) является параметром функции а не константа, то сложность - это количество параметров x, затрачиваемых на выполнение одной мультиоперационной операции, поскольку, очевидно, подпрограмма просто каскадирует их –
Хм, был бы способ, с помощью которого вы могли бы использовать рекурсию и многопроцессорную процедуру (которая принимает O (п^1.59)) и сохраним сложность при O (n^1.59)? – Tesla