阶乘的递归关系
Recurrence relation on Factorial
我正在通过在(幻灯片 7 和 8)找到的幻灯片研究复发:
http://www.cs.ucf.edu/courses/cop3502h/spring2012/Lectures/Lec8_RecurrenceRelations.pdf
我不能接受(可能我没看对)阶乘的递归方程是:
T(n) = T(n-1)+2
T(1) = 1
考虑函数的操作次数(“*”和“-”)时:
int factorial(int n) {
if (n == 1)
return 1;
return n * factorial(n-1);
}
如果我们使用 n = 5,我们将通过上面的公式得到 6,而真正的 subs 和 molts 数量是 8。
我的老师也告诉我们,如果只分析“*”的个数,那就是:
T(n) = T(n-1)+1.
同样,如果我使用 n = 5,我会得到 5,但如果你在纸上这样做,你将得到 4 次乘法。
我也在论坛上查过,但是这个问题比地狱更混乱:
Recurrence Relation
谁能帮我理解一下?谢谢。
if we use n = 5 we will get 6 by the formula above while the real number of subs and molts are 8.
看来幻灯片是在计算运算次数,而不仅仅是减法和乘法。特别是,return 语句被计为一个操作。 (幻灯片说,"if it’s the base case just one operation to return.")
因此,减法和乘法的实际次数是8次,但操作次数是9次。如果n是5,那么,展开递归,我们得到1 + 2 + 2 + 2 + 2 = 9次操作,这对我来说很合适。
我正在通过在(幻灯片 7 和 8)找到的幻灯片研究复发:
http://www.cs.ucf.edu/courses/cop3502h/spring2012/Lectures/Lec8_RecurrenceRelations.pdf
我不能接受(可能我没看对)阶乘的递归方程是:
T(n) = T(n-1)+2
T(1) = 1
考虑函数的操作次数(“*”和“-”)时:
int factorial(int n) {
if (n == 1)
return 1;
return n * factorial(n-1);
}
如果我们使用 n = 5,我们将通过上面的公式得到 6,而真正的 subs 和 molts 数量是 8。
我的老师也告诉我们,如果只分析“*”的个数,那就是:
T(n) = T(n-1)+1.
同样,如果我使用 n = 5,我会得到 5,但如果你在纸上这样做,你将得到 4 次乘法。
我也在论坛上查过,但是这个问题比地狱更混乱: Recurrence Relation
谁能帮我理解一下?谢谢。
if we use n = 5 we will get 6 by the formula above while the real number of subs and molts are 8.
看来幻灯片是在计算运算次数,而不仅仅是减法和乘法。特别是,return 语句被计为一个操作。 (幻灯片说,"if it’s the base case just one operation to return.")
因此,减法和乘法的实际次数是8次,但操作次数是9次。如果n是5,那么,展开递归,我们得到1 + 2 + 2 + 2 + 2 = 9次操作,这对我来说很合适。