给定一个大小的布尔数组,这都是真实的,我将如何仅使用递归将所有值设置为false


void resetLog(bool log[], int size){
    if(size < 0){
    log[size] = false;
    }
    else{
        resetLog(log, --size);
    }
} 

这是我到目前为止所拥有的,真的很喜欢反馈

void reset_bools( bool* start, bool* finish ){
  bool* mid = start + (finish-start)/2;
  if (mid==finish) return;
  *mid=false;
  reset_bools( start, mid );
  reset_bools( ++mid, finish );
}

这是一个半开间间隔。

void invertLog(bool[] log, int size)
{
    if(size == 0) return;
    log[--size] = false;
    invertLog(log, size);
}

简单而经典的decrease and conquer样式递归!:D

仅递归

void resetLog(void* log, int asize)
{   
    __asm {
          push esi    
          cmp asize, 0
          jle stop
          mov esi, log
          add esi, asize
          dec esi         
          mov [esi], 0  
          pop esi
          jmp recurs
stop:
          pop esi
          jmp toend
recurs:   
          mov  eax, asize
          dec  eax
          push eax  
          mov  eax, log  
          push eax 
          call resetLog
          add esp, 8
toend:    
    }
    return;
}

看看堆栈如何重载,逐步

"正常"代码(无堆栈过热)

void resetLog(void* log, int asize)
{   
    __asm
    {
          push ecx
          push esi
          mov ecx, log
          mov esi, ecx
          add esi, asize
    next:      
          dec esi
          cmp esi, ecx
          jl  stop
          mov [esi], 0
          jmp next
    stop:
          pop esi
          pop ecx
    }
    return;
}

最新更新