tooltiperror
Super Moderator
- Reaction score
- 231
How would I make a recursive function?
Like if I wanted it to keep calling itself so I don't have to use loops.
Like if I wanted it to keep calling itself so I don't have to use loops.
function A takes nothing returns nothing
call ExecuteFunc("A")
endfunction
library
globals
trigger Trigger=CreateTrigger()
private integer i=0
endglobals
private function Register takes nothing returns nothing
call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_WHO_KNOWS,null)
set i=i+1
if i<12
call ExecuteFunc("Register")
else
call TriggerAddAction(…)
endif
endfunction
endlibrary
// more efficient than:
private function Register takes nothing returns nothing
local trigger t=CreateTrigger()
local integer i=0
loop
call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_WHO_KNOWS,null)
set i=i+1
exitwhen i==12
endloop
endfunction
// ?
then you will lead board of shame, recursion never effective then loops.
int sumsquare(int i)
{
if(i <= 1)
i=1;
else i = i*i + sumsquare(i-1);
return i;
}
//! zinc
library LoopTest
{
function onInit()
{
local integer i=0
while(i>-1)
{
i=i+1;
BJDebugMsg(I2S(i));
}
}
}
//! endzinc
Actually, infinite loop is the only valid use of a recursive function in JASS I can think of.
Other than very large loops, I think recursion is useless.
//<16500
function a takes integer i returns integer
if i>udg_i then
return i
endif
return a(i+1)
endfunction
//<14500
function a takes integer i, integer c returns integer
if i>udg_i then
return i
endif
return a(i+1, c)
endfunction
//udg_i = 42857
loop
set udg_i = udg_i + 1
endloop
//udg_i = 23076
loop
exitwhen udg_i > 10000
set udg_i = udg_i + 1
endloop
//udg_i = 33333
loop
exitwhen false
set udg_i = udg_i + 1
endloop