Recursion 循环内部调用的递归函数的大O表示法
我试图确定几个算法的大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++) {
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次)。