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