Functions and Scope
Recursive Count
A recursive function calls itself with a smaller input.
smaller call
Recursion needs a stop case and a recursive case that moves toward it.
Recursive Count
recursive_count.lua
Replay: real traced execution (multi-file project)
local start = 3
local function count_down(value)
if value <= 0 then
return 0
end
return 1 + count_down(value - 1)
end
local steps = count_down(start)
print("start=" .. start)
print("steps=" .. steps)
local start = 1
local function count_down(value)
if value <= 0 then
return 0
end
return 1 + count_down(value - 1)
end
local steps = count_down(start)
print("start=" .. start)
print("steps=" .. steps)
local start = 5
local function count_down(value)
if value <= 0 then
return 0
end
return 1 + count_down(value - 1)
end
local steps = count_down(start)
print("start=" .. start)
print("steps=" .. steps)
start ← 3
1local start→ 3 = 3 --@start=1, 523local function count_down(value)4 if value <= 0 then5 return 06 end7 return 1 + count_down(value - 1)8end910local steps = count_down(start3)steps ← 3
10local steps→ 3 = count_down(start3)1112print("start=" .. start3)13print("steps=" .. steps3)outputstart=3 steps=3
start ← 1
1local start→ 1 = 123local function count_down(value)4 if value <= 0 then5 return 06 end7 return 1 + count_down(value - 1)8end910local steps = count_down(start1)steps ← 1
10local steps→ 1 = count_down(start1)1112print("start=" .. start1)13print("steps=" .. steps1)outputstart=1 steps=1
start ← 5
1local start→ 5 = 523local function count_down(value)4 if value <= 0 then5 return 06 end7 return 1 + count_down(value - 1)8end910local steps = count_down(start5)steps ← 5
10local steps→ 5 = count_down(start5)1112print("start=" .. start5)13print("steps=" .. steps5)outputstart=5 steps=5