Performance 递归的计算复杂性

Performance 递归的计算复杂性,performance,recursion,time-complexity,Performance,Recursion,Time Complexity,我在实验室里有这样的程序 int fun( int n ) { if (n==0) return 0; else return fun(n-1) +1; } 教授说函数是O(2^n)。 我不明白为什么,每次我数O我就得到O(n) 有人能解释给我听吗 int fun( int n ) { if (n==0) return 0; //1 operation for the base case else return fun(n-1) +1; //n-1 opera

我在实验室里有这样的程序

int fun( int n )
{
    if (n==0) return 0;
    else return fun(n-1) +1;
} 
教授说函数是O(2^n)。 我不明白为什么,每次我数O我就得到O(n)

有人能解释给我听吗

int fun( int n )
{
    if (n==0) return 0; //1 operation for the base case
    else return fun(n-1) +1; //n-1 operation in total
} 

我们可以向后看,假设您现在在基本情况下,您将执行一个
返回0是O(1),然后向上一级返回0+1也是O(1)。你打算回来几次?答案很简单,n次,所以n*1=n=>O(n)。如果你想说得准确一点,你每次重复都要做一次比较,一次加法,一次返回,所以总共是3*n-1,仍然是O(n)

是O(n)…你的教授错了LOL…顺便说一句,哪所大学?现在,有一个简单的方法来验证谁是对的,对于像这样的简单问题,你可以将一些数字细分,然后计算运算的#,O(2^n)意味着它总是大于c*2^n。在本例中,c不能小于1,因此,如果你在10中细分,你可以看到它显然不是这样的。caseWell“像这样”可能是危险的。你用递归方法解决了什么问题?(当然,在这个方法中,你是对的,它是O(n))@libik这样说我的意思是有些东西很容易计数。我怀疑你的教授认为这个密码解决了河内塔。显然不是。它解决了“不必要地从n计数到零”的问题。