Recursion 循环内部调用的递归函数的大O表示法

Recursion 循环内部调用的递归函数的大O表示法,recursion,big-o,Recursion,Big O,我试图确定几个算法的大O复杂度,但我很难理解如何对以下代码进行推理: void recursiveFunc (n) { for(int i = 0; i < 8; i++) { if (n < maxN) { recursiveFunc (n + 1); } else { for(int j = 0; j < 8; j++) {

我试图确定几个算法的大O复杂度,但我很难理解如何对以下代码进行推理:

void recursiveFunc (n)
{
   for(int i = 0; i < 8; i++)
   {
       if (n < maxN)
       {
           recursiveFunc (n + 1);
       }
       else
       {
           for(int j = 0; j < 8; j++)
           {
              // do some stuff
           }
       }
   }
}
void recursiveFunc(n)
{
对于(int i=0;i<8;i++)
{
if(n
我认为这是一个指数,因为递归函数是在循环中调用的。O(8^n)? 但我有点搞不懂该如何推理。

你的建议是正确的

鉴于代码:

var maxN = 16;
var initN = 0;
var count = 0;
function recursiveFunc (n) {
    for(var i = 0; i < 8; i++) {
        if (n < maxN) {
                recursiveFunc (n + 1);
        } else {
            for(int j = 0; j < 8; j++) {
                count++;
            }
        }
    }
}
recursiveFunc(initN);
var maxN=16;
var initN=0;
var计数=0;
函数递归func(n){
对于(变量i=0;i<8;i++){
if(n
第一次调用在n=0时发生:

递归函数的8^1调用(其中n=1)

n=1的调用然后导致:8^2次递归函数调用

使用n=(maxN-1)调用然后导致:8^maxN调用recursiveFunc=>访问else分支,每个调用输入“some stuff”64次


第一个调用在n=2,maxN=4时发生:

递归函数的8^1调用(其中n=3)

n=3的调用然后导致:8^2个递归函数调用(其中n=4)

n=4的呼叫,然后访问else分支,每次64次


因此,进入“一些东西”阶段的总计数:64*(8^(maxN-initN))

O(8^n)

编辑:您可以在这里的工作中看到这一点,只需单击“运行代码段”,然后点击“测试”按钮。(尝试更大的maxN值可能会使浏览器崩溃)

功能测试(){
var maxN=parseInt(document.querySelector(“#nmax”).value);
var initN=parseInt(document.querySelector(“#n”).value);
var计数=0;
函数递归func(n){
对于(变量i=0;i<8;i++){
if(n
N:
NMAX:

期望值:
实际值:
测试
我觉得这像O(1)。对于所有足够大的n,这个函数什么也不做(正好64次)。