【发布时间】:2017-09-14 23:37:03
【问题描述】:
我需要找出这种递归算法的复杂性,所以,我有 3 种递归算法,只是想知道它们的大 O 表示法。我想我有其中两种算法的解决方案,只是想咨询社区。p>
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;
}
}
这个递归算法的复杂度是多少,我没有这个算法的解决方案,你能帮帮我吗?
【问题讨论】:
-
“他们的大 O 表示法”是指他们的时间复杂度还是他们的结果的增长顺序?
-
我认为你需要时间复杂度。另外,编辑你的函数 f3,它不需要任何参数
-
Master-Theorem 是解决更复杂的重复问题的常用方法,例如您问题中的最后一个问题。