algorithm - 大 O 符号 - 递归函数

标签 algorithm recursion

我需要找到这种递归算法的复杂性,所以,我有 3 种递归算法,只想知道它们的大 O 表示法。我想我有针对其中 2 种算法的解决方案,只是想与社区核实一下。

int f1(int n)
{
    if ( n<= 1)
        return (1);
    else 
        return (n *f1(n-1))
}

我认为这个问题的解决方案是 O(n)。

int f2 (int n)
{
    if(n<=1)
        return(1);
    else
        return(n*f2(n / 2))
}

我认为这个问题的解决方案是 O(Log 2 (n))

int f3 
{
    int x, i; 
    if( n <= 1)  
        return 1;  
    else 
    {
        x = f3 (n / 2);           
        for( i = 1 ; i <= n ; i++)   
         x++;        
         return x;  
    }
}

这个递归算法的复杂度是多少,我没有这个算法的解法,你能帮我吗?

最佳答案

您的前两个答案是正确的。 让我们来分析你的第三个问题, 对于每一次,n 除以 2,我们需要将 x 添加 n 次, 所以复杂性将是 1*n+1*n/2+1*n/4+.....+1=n(1+1/2+1/4+...)=O(n)

关于algorithm - 大 O 符号 - 递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46222445/

相关文章:

c++ - 线段相交算法

c++ - 是否可以编写一个像 next_permutation 这样的函数,但它只排列 r 值,而不是 n 值?

java - 这里的递归是如何工作的?

c - 为什么这个递归代码会抛出段错误?

algorithm - 大小为 k 的最常见子集

algorithm - 从两个值生成唯一 ID

python - 使用通配符和不匹配项有效地搜索前缀

javascript - 递归函数如何返回值?

java - 递归函数不适用于 CheckLink 函数

python - 递归分数(python)