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

start
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)
  1. 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)
  2. steps ← 3

    10local steps→ 3 = count_down(start3)1112print("start=" .. start3)13print("steps=" .. steps3)
    outputstart=3
    steps=3
  1. 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)
  2. steps ← 1

    10local steps→ 1 = count_down(start1)1112print("start=" .. start1)13print("steps=" .. steps1)
    outputstart=1
    steps=1
  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)
  2. steps ← 5

    10local steps→ 5 = count_down(start5)1112print("start=" .. start5)13print("steps=" .. steps5)
    outputstart=5
    steps=5