测量递归函数的代码复杂度
Measuring code complexity of a recursive function
据我的教授说,这个代码是 Teta(n^n)
逐行测量我无法发现自己为什么它的 n^n 复杂性
这是代码
any(v[], n, degree){
for(i=0; i<degree; i++){
any(v,n-1,degree)
}
}
我一直在做自己。
any(v[], n, degree){
for(i=0 - C; i<degree c(n+1); i++ cn){
any(v,n-1,degree) n(T(n-1))
}
}
是2c+2cn+n(T(n-1))
.
您的教授是对的,该代码将 运行 永远递归地调用自身并且 n 增长为负数。如果这不是你想要的,那么你将不得不实现一个条件来结束递归,即 n:
的值
any(v[], n, degree){
if (n > -1) {
for(i=0;i< degree;i++){
any(v,n-1,degree)
}
}
}
首先,看起来这实际上是无限的,因为它不会中断或 return 在 n==0。假设算法在 n==0 处执行 return(它必须在当前缺少的 if 语句中执行):
T(n) = 度数*T(n-1),其中 T(0) = 1 且 T(1) = 度数
这减少到 O(degree^n)
我不太确定 n^n 来自哪里。除非我算错了。
据我的教授说,这个代码是 Teta(n^n)
逐行测量我无法发现自己为什么它的 n^n 复杂性
这是代码
any(v[], n, degree){
for(i=0; i<degree; i++){
any(v,n-1,degree)
}
}
我一直在做自己。
any(v[], n, degree){
for(i=0 - C; i<degree c(n+1); i++ cn){
any(v,n-1,degree) n(T(n-1))
}
}
是2c+2cn+n(T(n-1))
.
您的教授是对的,该代码将 运行 永远递归地调用自身并且 n 增长为负数。如果这不是你想要的,那么你将不得不实现一个条件来结束递归,即 n:
的值any(v[], n, degree){
if (n > -1) {
for(i=0;i< degree;i++){
any(v,n-1,degree)
}
}
}
首先,看起来这实际上是无限的,因为它不会中断或 return 在 n==0。假设算法在 n==0 处执行 return(它必须在当前缺少的 if 语句中执行):
T(n) = 度数*T(n-1),其中 T(0) = 1 且 T(1) = 度数
这减少到 O(degree^n)
我不太确定 n^n 来自哪里。除非我算错了。