You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归函数时间复杂度求解:是否为O(n²logn)?

递归函数时间复杂度分析

先看你给出的伪代码:

def inc(m):
  if m>12:
     return;
  for i in range(1,m):
     //some code
  mergeSort(array,0,n-1)
  for j in range(1,m):
     //some code
  inc(m+=1);

咱们一步步拆解复杂度:

  • 递归调用次数是固定常数:这个函数的终止条件是m>12,不管初始调用时m是1还是其他≤12的数,递归最多执行12次(比如从m=1到m=12,第12次调用后m变成13,直接返回),总调用次数是个固定值。
  • for循环的开销是常数级:每个for循环执行m-1次,而m最大是12,就算两个循环加起来,单次调用里循环最多执行2*(12-1)=22次,12次递归总共有12*22=264次循环操作——不管n多大,这个数都是固定的,属于O(1)的常数开销,不会主导整体复杂度。
  • 归并排序是核心开销:每次递归调用都会执行一次mergeSort(array,0,n-1),而归并排序的时间复杂度是O(n log n)。因为总共执行12次归并排序,12是常数,所以这部分总开销是12*O(n log n),也就是O(n log n)。

所以整体时间复杂度是O(n log n),你猜测的O(n²logn)不对——这里没有和n²相关的操作,for循环的次数是固定的,不会随n增长而变化,完全不影响主导项。

内容的提问来源于stack exchange,提问作者Raxhacks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:10:29