如何找到这个递归函数的递归关系?
How to find recursive relation of this recursive function?
这里我有一个这样的函数,我想找到它的递归关系,然后计算它的时间复杂度递归关系。
public static void f(int n) {
if (n == 1) {
//" Do sth "
} else {
for (int i = 1; i < n; i++) {
f(i - 1);
//" Do sth "
}
}
}
实际上我为此尝试了很多,我得到了 T(n) = n * f( n-1)作为关系起作用,但我不确定。你能帮我找到正确的关系并解决吗?
假设 T(1) = "Do sth" 是持续工作,即它不依赖于输入大小 n
,您可以将递归时间函数编写为:
T(n) = T(1) + T(2) + ... + T(n-1)
= { T(1) } + { T(1) } + { T(1) + T(2) } + { T(1) + T(2) + T(3) } + { T(1) + T(2) + T(3) + T(4) } +....
[let T(1) = x]
= x + x + {x + x} + {x + x + (x + x)} + {x + x + (x + x) + x + x + (x + x)} +....
= x + x + 2x + 4x + 8x + ...
~ x.2^(n-2)
~ O(2^n)
这里有一个 python 程序来演示求和的系数序列:
t = [0 for i in range(10)]
for i in range(1,10):
if i == 1:
t[i] = 1
else:
val = 0
for j in range(1,i):
val += t[j]
t[i] = val
print(t[1:])
打印:[1, 1, 2, 4, 8, 16, 32, 64, 128]
你可以看到 2(n-2) 对于 n >= 2 在每个 'n' 上都很好并且复杂度是 O(2 n)
这里我有一个这样的函数,我想找到它的递归关系,然后计算它的时间复杂度递归关系。
public static void f(int n) {
if (n == 1) {
//" Do sth "
} else {
for (int i = 1; i < n; i++) {
f(i - 1);
//" Do sth "
}
}
}
实际上我为此尝试了很多,我得到了 T(n) = n * f( n-1)作为关系起作用,但我不确定。你能帮我找到正确的关系并解决吗?
假设 T(1) = "Do sth" 是持续工作,即它不依赖于输入大小 n
,您可以将递归时间函数编写为:
T(n) = T(1) + T(2) + ... + T(n-1)
= { T(1) } + { T(1) } + { T(1) + T(2) } + { T(1) + T(2) + T(3) } + { T(1) + T(2) + T(3) + T(4) } +....
[let T(1) = x]
= x + x + {x + x} + {x + x + (x + x)} + {x + x + (x + x) + x + x + (x + x)} +....
= x + x + 2x + 4x + 8x + ...
~ x.2^(n-2)
~ O(2^n)
这里有一个 python 程序来演示求和的系数序列:
t = [0 for i in range(10)]
for i in range(1,10):
if i == 1:
t[i] = 1
else:
val = 0
for j in range(1,i):
val += t[j]
t[i] = val
print(t[1:])
打印:[1, 1, 2, 4, 8, 16, 32, 64, 128]
你可以看到 2(n-2) 对于 n >= 2 在每个 'n' 上都很好并且复杂度是 O(2 n)