评估算法运行时时,循环中的不等号是否会产生影响?
分析foo1与foo2的运行结果差异
先把两个函数的代码清晰展示出来:
int foo1(int n) { int i, j, x = 0; for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) x++; return x; } int foo2(int n) { int i, j, x = 0; for (i = 1; i < n; i++) for (j = 1; j < n; j++) x++; return x; }
核心差异就是两个嵌套循环里的不等号类型,直接决定了循环的执行次数,进而影响最终返回的x值:
foo1的运行逻辑:
外层循环i从1开始,直到i <= n才停止,所以会完整执行n次(i=1,2,...,n)。每一次外层循环,内层循环j同样从1到n执行n次。最终x的累加次数是n * n,也就是返回值为n²。foo2的运行逻辑:
外层循环i从1开始,当i < n时才继续,所以只会执行n-1次(i=1,2,...,n-1)。内层循环同理,j也只执行n-1次。最终x的累加次数是(n-1) * (n-1),返回值为(n-1)²。
举个具体例子直观感受:当n=5时,foo1返回25,foo2返回16,两者的差值是25-16=9,刚好等于2*5-1(这是n² - (n-1)²的展开结果)。
简单来说,foo1比foo2多执行了「外层循环的最后一次(i=n)」以及「每一轮外层循环里j=n的那次内层循环」,这些额外的执行次数直接导致了返回值的差异。
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

