Time complexity 内部循环是如何执行的;“不适用”;时代?

Time complexity 内部循环是如何执行的;“不适用”;时代?,time-complexity,big-o,asymptotic-complexity,Time Complexity,Big O,Asymptotic Complexity,我对代码片段的时间复杂性有疑问,并且不太理解给出的解决方案 function (n) { for(int i =0 ; i < n ; i ++){ for(int j = 0 ; j <= n ; j += i){ printf("*"); } 函数(n){ 对于(int

我对代码片段的时间复杂性有疑问,并且不太理解给出的解决方案

function (n) {
           for(int i =0 ; i < n ; i ++){
                       for(int j = 0 ; j <= n ; j += i){
                                  printf("*");
                                      }
函数(n){
对于(int i=0;i对于(int j=0;j有两个循环,一个是递增的
i
,一个是递增的
j

给定固定的
i
,对于
j
循环的每次循环,
j
增加
i
,直到
j
达到
n

因此,每次迭代中
j
的值为:

j
j + i
j + 2i
...
j + (n/i - j/i)i 

正如您所看到的,它运行O(n/i)次。

您确定这是正确的代码吗?内部循环变量(
j
)在第一个循环中,
i
是零,因此
j
永远不会改变,这个循环也永远不会终止。
j
将随着
j
的增加而改变,而内部循环在
j>n
时终止。上面的代码是正确的。如果你看代码,你会看到这一点
j
没有递增。表达式
j+=i
为外部循环的第一次迭代将
0
添加到
j
i
初始化为
i=0
).
j
将永远不会改变,循环也永远不会终止。非常感谢澄清了这个疑问。但我有一个疑问。为什么最后的迭代不能是
j+ni
?然后它运行O(n)次。