2014-02-19 64 views
0

举个例子,我将使用代码,接近,posted on stackoverflowç递归太深

void recurse(int level=1) { 
    printf("Level=%02d\n", level); 

    if (level > 14) { 
     printf("Depth exceeded 14 !!!\n"); 
     return; 
    } 
    recurse(level+1); 
    //recurse(level+1);//commented out, i get levels 1-15 in a row 
} 

假设我有

recurse(1); 

称之为随着内部功能我一个递归调用得到我的预期 - 等级1-15打印出来和超出的信息。

如果我取消第二次通话的注释,即时消息不会得到2 x 15的额外消息,但即时消息猜测,15 x 15深度超出的消息。

有没有办法改写这种方式,我会有2 x 15递归深度,而不是15 x 15?

谢谢你们的快速解答。

不幸的是,我已经把它全部弄错了:)我的印象是,第一个内部调用会缓存出来,然后是第二个,所以我会有2 x 15的深度。

+0

错误的猜测。您将收到2^14条消息,因为您可以轻松验证(或通过归纳证明)。 –

+5

'void recurse(int level = 1){':语法错误(C没有默认参数) – wildplasser

回答

1

保持原样。称它两次。

recurse(1); 
recurse(1); 
+0

不,这会产生2 * 15 ...这些不是递归调用,它们来自函数之外。 –

+0

看起来像一个巨大的返工:(谢谢,我明白了。 – user3314134

0
void recurse(int level=1) { 
    printf("Level=%02d\n", level); 

    if (level == 1) 
    { 
     recurse(2); 
     printf("Level=%02d\n", level);  
    } 

    if (level > 14) { 
     printf("Depth exceeded 14 !!!\n"); 
     return; 
    } 
    recurse(level+1); 
} 

你可以做一个单一的功能,但它几乎是相同的(1)调用两次resurse!

如果它可以帮助你的......

+0

感谢您的回答,虐待重新思考这个整个递归的想法。 – user3314134