C++ 给定一个大小都为真的布尔数组,如何仅使用递归将所有值设置为假? void resetLog(bool log[],整数大小){ 如果(尺寸

C++ 给定一个大小都为真的布尔数组,如何仅使用递归将所有值设置为假? void resetLog(bool log[],整数大小){ 如果(尺寸,c++,recursion,C++,Recursion,这是我到目前为止得到的,非常感谢您的反馈 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 + (finis

这是我到目前为止得到的,非常感谢您的反馈

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 );
}
看看堆栈是如何一步一步重载的

“正常”代码(无堆栈过热)


简单而经典的
减少和克服
风格的递归!:D

那么,当
size
变为负数时,通过将
log[-1]
设置为
false
,您希望实现什么呢?你知道吗?你到底为什么要使用递归而不是简单的循环,这样会更快、更精简、更干净?如果
size<0
?,正如Varshavchik所说,仔细考虑这个问题。你的if语句是个问题。出于兴趣,你到底为什么要通过递归来实现这一点?“这是一个家庭作业问题吗?”阿奇马雷德斯是的,这是一个家庭作业。这很好,但OP可能想要一个线性的解决方案。不是递归的。你能让它递归吗?当然。看看新代码这是个玩笑吗?问题被标记为c++否。我只是使用C++的所有功能。在我的示例中,您可以看到,简单的递归代码有很多水下石头。但是,假设Intel可以完美地工作!谢谢,没问题!只要确保你使用这样的
家庭作业问题
来增强你的递归式思维。总是用最简单的方法解决问题。请注意,非递归计数循环算法
更易于阅读
执行速度更快
占用更少的堆栈帧
可以轻松地并行化
!:)
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;
}
void invertLog(bool[] log, int size)
{
    if(size == 0) return;
    log[--size] = false;
    invertLog(log, size);
}