Pra*_*rav 2 algorithm recurrence
为什么递归因子算法的递归关系呢?
T(n)=1 for n=0
T(n)=1+T(n-1) for n>0
Run Code Online (Sandbox Code Playgroud)
为什么不是这个?
T(n)=1 for n=0
T(n)=n*T(n-1) for n>0
Run Code Online (Sandbox Code Playgroud)
将n即1,2,3,4 ......的值置于第二个递归关系(正确计算因子)不是第一个.
我们通常使用递归关系来找出算法的时间复杂度.
这里,函数T(n)实际上不是用于计算阶乘的值,而是告诉你阶乘算法的时间复杂度.
这意味着找到n的阶乘,它将比n-1的阶乘(即T(n)= T(n-1)+ 1)需要多1次操作,依此类推.
所以递归因子算法的正确递归关系是T(n)= 1,n = 0 T(n)= 1 + T(n-1),n> 0,这不是你后面提到的.
像河内塔的复发一样,对于n> 0,T(n)= 2T(n-1)+1;
小智 5
他提出的不是阶乘递归,而是它的时间复杂度。
假设这是这种重复的伪代码:
1. func factorial(n)
2. if (n == 0)
3. return 1
4. return n * (factorial - 1)
Run Code Online (Sandbox Code Playgroud)
第 2 行和第 3 行花费恒定时间 c1 和 c2。
第 4 行的时间也是恒定的。但是,它调用 factorial(n-1) 需要一些时间 T(n-1)。此外,一旦使用 T(n-1),可以忽略将 factorial(n-1) 乘以 n 所需的时间。
整个函数的时间就是总和:T(n) = c1 + c2 + T(n-1)。
这在大 o 符号中被简化为 T(n) = 1 + T(n-1)。
正如 Diam 指出的那样,这是一个平面递归,因此它的运行时间应该是 O(n)。但它的空间复杂度将是巨大的。