Breakpoint 2, m2 (a=3, b=4) at cap.cc:13
13 if (a == 0)
(gdb) display a
1: a = 3
(gdb) display b
2: b = 4
(gdb) n
16 return a * m2(a - 1, b);
2: b = 4
1: a = 3
(gdb)
Breakpoint 2, m2 (a=2, b=4) at cap.cc:13
13 if (a == 0)
2: b = 4
1: a = 2
(gdb)
16 return a * m2(a - 1, b);
2: b = 4
1: a = 2
(gdb)
Breakpoint 2, m2 (a=1, b=4) at cap.cc:13
13 if (a == 0)
2: b = 4
1: a = 1
(gdb)
16 return a * m2(a - 1, b);
2: b = 4
1: a = 1
(gdb)
Breakpoint 2, m2 (a=0, b=4) at cap.cc:13
13 if (a == 0)
2: b = 4
1: a = 0
(gdb)
14 return 0;
2: b = 4
1: a = 0
(gdb)
17 }
2: b = 4
1: a = 0
(gdb)
17 }
2: b = 4
1: a = 1
(gdb)
17 }
2: b = 4
1: a = 2
(gdb)
17 }
2: b = 4
1: a = 3
(gdb)
m3:
Breakpoint 1, m3 (a=3, b=4) at cap.cc:5
5 if (b == 0)
8 return a * m3(a, b - 1);
(gdb) display a
3: a = 3
(gdb) display b
4: b = 4
(gdb) n
Breakpoint 1, m3 (a=3, b=3) at cap.cc:5
5 if (b == 0)
4: b = 3
3: a = 3
(gdb)
8 return a * m3(a, b - 1);
4: b = 3
3: a = 3
(gdb)
Breakpoint 1, m3 (a=3, b=2) at cap.cc:5
5 if (b == 0)
4: b = 2
3: a = 3
(gdb)
8 return a * m3(a, b - 1);
4: b = 2
3: a = 3
(gdb)
Breakpoint 1, m3 (a=3, b=1) at cap.cc:5
5 if (b == 0)
4: b = 1
3: a = 3
(gdb)
8 return a * m3(a, b - 1);
4: b = 1
3: a = 3
(gdb)
Breakpoint 1, m3 (a=3, b=0) at cap.cc:5
5 if (b == 0)
4: b = 0
3: a = 3
(gdb)
6 return 1;
4: b = 0
3: a = 3
(gdb)
9 }
4: b = 0
3: a = 3
(gdb)
9 }
4: b = 1
3: a = 3
(gdb)
9 }
4: b = 2
3: a = 3
(gdb)
9 }
4: b = 3
3: a = 3
(gdb)
9 }
4: b = 4
3: a = 3
(gdb)
81 0
#include <cstdio>
int m3 (int a, int b)
{
if (b == 0)
return 1;
elsereturn a * m3(a, b - 1);
}
int m2(int a, int b)
{
if (a == 0)
return 0;
elsereturn a * m2(a - 1, b);
}
int main()
{
printf("%d %d\n", m3(3,4), m2(3,4));
return 0;
}