Time complexity 递归算法的时空复杂度
将Time complexity 递归算法的时空复杂度,time-complexity,space-complexity,Time Complexity,Space Complexity,将n转换为其英文单词表示形式,其中0对于大于100000000的所有输入n,函数立即返回空字符串,无需任何计算或递归调用。当然,时间复杂度是O(1),同样的空间复杂度(因为较小的n发生的情况完全不相关) 如果你去掉这条线,情况就会不同,也会更有趣 elif n < 1000000000 谢谢你的回复。比如说,如果我更有效地处理字符串连接(附加/扩展到列表,然后连接这些字符串),那么算法会花费O(logn)时间(O(logn)用于字符串连接+O(logn)用于递归调用=O(logn)总体)
n
转换为其英文单词表示形式,其中0对于大于100000000的所有输入n
,函数立即返回空字符串,无需任何计算或递归调用。当然,时间复杂度是O(1),同样的空间复杂度(因为较小的n
发生的情况完全不相关)
如果你去掉这条线,情况就会不同,也会更有趣
elif n < 1000000000
谢谢你的回复。比如说,如果我更有效地处理字符串连接(附加/扩展到列表,然后连接这些字符串),那么算法会花费O(logn)时间(O(logn)用于字符串连接+O(logn)用于递归调用=O(logn)总体)和O(logn)空间(用于递归调用)吗?例如,如果n=99999999。是的,但只有当您删除
n
上的最后一个条件时,否则它是O(1)。为什么它是O(1)?如果n大于最后一个条件,那么,是的,我们立即返回,它是O(1)。但我可以有不同的输入,对吗?如果我删除n上的最后一个条件,我仍然可以有不同的输入。例如,如果我删除了最后一个条件,输入将是999999,那么我将有几个对helper函数的递归调用。这不是需要O(logn)时间吗?是的,我是这么说的:如果删除最后一个条件并更有效地连接字符串,那么现在是O(logn)时间了。很抱歉造成混淆。你是说如果我不删除最后一个条件,并且我的输入将是,例如,999999,那么时间复杂度将是O(1)?
elif n < 1000000000
void f(int n) {
if (n < 1000000000) {
for(int i = 0; i < n; i++) {
for(int k = 0; k < n; k++)
print(i);
}
}
else print("");
}