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);
}