рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд┐рдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдзреБрдирд┐рдХ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИрдВ: рд╡реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдирдХреА рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЙрд╕реЗ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдХрд╛рд░реНрдп рдпрд╣ рд╕рдордЭрдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЬреЛ рдЗрдирдкреБрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрд╛ рд╣реИ, рд╡рд╣ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рддреЗрдЬреА рд╕реЗред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕рдВрдХрд▓рдХ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдореВрд▓ рдЕрдиреБрдорд╛рди рддрдХрдиреАрдХреЛрдВ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗ: рдПрдХ рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХреИрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХреЗ; рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреНрдпрд╛ рдХрдЯреМрддреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрдо рдХрд░рдиреЗ рдФрд░ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХрд╣реАрдВ рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рдмрдбрд╝реЗ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( 
рд╕реНрдХрд╛рд▓рд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ ) рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ; рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдВрдХрд▓рдХ рдХреЗ рдмрд╛рдж рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ ( 
рдкреНрд░реЛрдЧрд╛рд░реНрдб ); рдпрд╛ рдПрдХ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдЕрдкрдиреЗ рдирд┐рд╖реНрдкрд╛рджрди ( 
JVM JIT рд╕рдВрдХрд▓рдХ ) рдХреЗ рджреМрд░рд╛рди рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИред рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗ рдХрд╛рдо рдореЗрдВ рд╕реАрдорд╛рдПрдВ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рдо рд╣реИ: рдЗрдирдкреБрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд▓реЗрдирд╛ рдФрд░ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдореЗрдВ рдмрджрд▓рдирд╛, рдЬреЛ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддреЗрдЬреА рд╕реЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдбреНрд░рд╛рдлреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рддрд╛рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдЯрд╛ рдФрд░ рддреЗрдЬ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдбреНрд░рд╛рдлреНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдо
рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЬрд╛рд╡рд╛ рдореЗрдВ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рднрд╛рд╖рд╛ рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдХреЛрдбрд╛рдВрддрд░рдХ - 
рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИ ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЕрдЪреНрдЫреА рдиреАрдВрд╡ рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдХреА рдмрджреМрд▓рдд рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХрд▓рди рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рднреА рддрдХрдиреАрдХ рд▓рдЧрднрдЧ рд╕рднреА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдорд╕реМрджрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рдорд╛рдирдХ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдЦреБрдж рд╣реА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдХреНрдпрд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЪрд┐рддреНрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
static int main(int n){ int count = 0, total = 0, multiplied = 0; Logger logger = new PrintLogger(); while(count < n){ count += 1; multiplied *= count; if (multiplied < 100) logger.log(count); total += ackermann(2, 2); total += ackermann(multiplied, n); int d1 = ackermann(n, 1); total += d1 * multiplied; int d2 = ackermann(n, count); if (count % 2 == 0) total += d2; } return total; }  
рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╣ рд╕рдм рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ, рдХреЛрдб рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рднрд╛рдЧ рдЗрд╕реЗ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред рдпрд╣ 
main рдбреЗрдЯрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЕрдм рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЙрджрд╛рд╣рд░рдг
рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдЯрд╛рдЗрдк рдХрд░реЗрдВ
рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ 
logger рдЪрд░ рдХрд╛ рдПрдХ рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рд╣реИ: 
Logger рд▓реЗрдмрд▓ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрд╡рд░реНрдЧ рд╣реИ - 
PrintLogger :
 - Logger logger = new PrintLogger(); + PrintLogger logger = new PrintLogger(); 
рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ 
logger PrintLogger , рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ 
logger.log рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЗрдирд▓рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 - if (multiplied < 100) logger.logcount(); + if (multiplied < 100) System.out.println(count); 
рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ 
ErrLogger рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди 
public Logger log рддрд░реАрдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдХрд░, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЙрд▓ рдХреЗ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдЗрдирд▓рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред
рдЬрдорд╛рд╡рдЯ рдХрд╛рдВрд╕реНрдЯреЗрдВрдЯ
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, 
count рдФрд░ 
total рдкрд░рд┐рд╡рд░реНрддрди, рд▓реЗрдХрд┐рди 
multiplied рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ: рдпрд╣ 
0 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рд░ рдмрд╛рд░ 
multiplied = multiplied * count рдорд╛рдзреНрдпрдо рд╕реЗ 
multiplied = multiplied * count , 
0 рдмрд░рд╛рдмрд░ рд░рд╣рддрд╛ рд╣реИред рддреЛ, рдЖрдк рдЗрд╕реЗ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ 
0 рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
 static int main(int n){ - int count = 0, total = 0, multiplied = 0; + int count = 0, total = 0; PrintLogger logger = new PrintLogger(); while(count < n){ count += 1; - multiplied *= count; - if (multiplied < 100) System.out.println(count); + if (0 < 100) logger.log(count); total += ackermann(2, 2); - total += ackermann(multiplied, n); + total += ackermann(0, n); int d1 = ackermann(n, 1); - total += d1 * multiplied; int d2 = ackermann(n, count); if (count % 2 == 0) total += d2; } return total; } 
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ 
d1 * multiplied рд╣рдореЗрд╢рд╛ 
0 , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ 
total += d1 * multiplied рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 - total += d1 * multiplied 
рдореГрдд рдХреЛрдб рд╣рдЯрд╛рдирд╛
multiplied рдФрд░ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ 
total += d1 * multiplied рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЖрдк 
int d1 рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 - int d1 = ackermann(n, 1); 
рдпрд╣ рдЕрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ 
ackermann рдПрдХ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░рдиреЗ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЗрд╕реА рддрд░рд╣, 
logger.log рдмрд╛рдж, 
logger рдЦреБрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 - PrintLogger logger = new PrintLogger(); 
рд╢рд╛рдЦрд╛ рдирд┐рдХрд╛рд▓рдирд╛
рдЕрдм рд╣рдорд╛рд░реЗ рдЪрдХреНрд░ рдореЗрдВ рдкрд╣рд▓рд╛ рд╕рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг 
0 < 100 рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ, рдЖрдк рдмрд╕ рд╢рд░реНрдд рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 - if (0 < 100) System.out.println(count); + System.out.println(count); 
рдХреЛрдИ рднреА рд╕рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рдд рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдРрд╕реЗ рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЖрдк рдЗрд╕рдХреЗ рд╢рд░реАрд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдВрд╢рд┐рдХ рдЧрдгрдирд╛
рдЕрдм рд╣рдо рддреАрди рд╢реЗрд╖ рдХреЙрд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ:
  total += ackermann(2, 2); total += ackermann(0, n); int d2 = ackermann(n, count); 
- рдкрд╣рд▓реЗ рдХреЗ рджреЛ рдирд┐рд░рдВрддрд░ рддрд░реНрдХ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рд╢реБрджреНрдз рд╣реИ, рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрдирд╛ рдкрд░ ackermann(2, 2)7.рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП7.
- рджреВрд╕рд░реА рдХреЙрд▓ рдореЗрдВ рдПрдХ рдирд┐рд░рдВрддрд░ рддрд░реНрдХ 0рдФрд░ рдПрдХ рдЕрдЬреНрдЮрд╛рддnред рдЖрдк рдЗрд╕реЗackermannрдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЬрдмm0, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛n + 1.
 
- рддреАрд╕рд░реА рдХреЙрд▓ рдореЗрдВ, рджреЛрдиреЛрдВ рддрд░реНрдХ рдЕрдЬреНрдЮрд╛рдд рд╣реИрдВ: nрдФрд░countред рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдВред
 
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ 
ackermann рд▓рд┐рдП рдХреЙрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 static int ackermann(int m, int n){ if (m == 0) return n + 1; else if (n == 0) return ackermann(m - 1, 1); else return ackermann(m - 1, ackermann(m, n - 1)); } 
рдЖрдк рдЗрд╕реЗ рд╕рд░рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 - total += ackermann(2, 2); + total += 7 - total += ackermann(0, n); + total += n + 1 int d2 = ackermann(n, count); 
рджреЗрд░ рд╕реЗ рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдирд╛
рдбреА 2 рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рд╢рд░реНрдд 
if (count % 2 == 0) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 
if (count % 2 == 0) ред рдЪреВрдБрдХрд┐ 
ackermann рдЧрдгрдирд╛ рд╕рд╛рдл рд╣реИ, рдЖрдк рдЗрд╕ рдХреЙрд▓ рдХреЛ рдПрдХ рд╕рд╢рд░реНрдд 
ackermann рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рддрдХ рд╕рдВрд╕рд╛рдзрд┐рдд рди рд╣реЛ:
 - int d2 = ackermann(n, count); - if (count % 2 == 0) total += d2; + if (count % 2 == 0) { + int d2 = ackermann(n, count); + total += d2; + } 
рдпрд╣ 
ackermann(n, count) рдЖрдзреЗ рдХреЙрд▓ рд╕реЗ рдмрдЪ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рддреЗрдЬреА 
ackermann(n, count) ред
рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, 
System.out.println рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдл тАЛтАЛрдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╕рд╢рд░реНрдд рдЫрд▓рд╛рдВрдЧ рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдмрд╛рд╣рд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдиреБрдХреВрд▓рд┐рдд рдкрд░рд┐рдгрд╛рдо
рд╕рднреА рдЕрдиреБрдХреВрд▓рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:
 static int main(int n){ int count = 0, total = 0; while(count < n){ count += 1; System.out.println(count); total += 7; total += n + 1; if (count % 2 == 0) { total += d2; int d2 = ackermann(n, count); } } return total; } static int ackermann(int m, int n){ if (m == 0) return n + 1; else if (n == 0) return ackermann(m - 1, 1); else return ackermann(m - 1, ackermann(m, n - 1)); } 
рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдордиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╕рдм рдЕрдкрдиреЗ рдЖрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬреЗрд╡реАрдПрдо рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рд▓рд┐рдЦрд╛ рдерд╛, рдЙрд╕рдХрд╛ рд╡рд┐рдШрдЯрд┐рдд рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
 static int main(int var0) { new Demo.PrintLogger(); int var1 = 0; int var3; for(int var2 = 0; var2 < var0; var2 = var3) { System.out.println(var3 = 1 + var2); int var10000 = var3 % 2; int var7 = var1 + 7 + var0 + 1; var1 = var10000 == 0 ? var7 + ackermann(var0, var3) : var7; } return var1; } static int ackermann__I__TI1__I(int var0) { if (var0 == 0) return 2; else return ackermann(var0 - 1, var0 == 0 ? 1 : ackermann__I__TI1__I(var0 - 1);); } static int ackermann(int var0, int var1) { if (var0 == 0) return var1 + 1; else return var1 == 0 ? ackermann__I__TI1__I(var0 - 1) : ackermann(var0 - 1, ackermann(var0, var1 - 1)); } static class PrintLogger implements Demo.Logger {} interface Logger {} 
рд╡рд┐рдШрдЯрд┐рдд рдХреЛрдб рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред рдХреБрдЫ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 
new PrintLogger рд▓рд┐рдП рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЙрд▓), рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 
ackermann рдФрд░ 
ackermann__I__TI1__I )ред рд▓реЗрдХрд┐рди рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП, рдСрдЯреЛрдореИрдЯрд┐рдХ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдиреЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЬреИрд╕рд╛ рдХрд┐рдпрд╛ рдерд╛, рд╡реИрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ред
рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдХреИрд╕реЗ?
рдордзреНрдпрд╡рд░реНрддреА рд╡рд┐рдЪрд╛рд░
рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдЬреЛ рд╢рд╛рдпрдж рдЙрдарддрд╛ рд╣реИ, рд╡рд╣ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛: "рдкреНрд░реЛрдЧреНрд░рд╛рдо" рдХреНрдпрд╛ рд╣реИ?
рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдкрдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛, рд╢рд╛рдпрдж рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЛ рднреА рдбреАрдмрдЧ рдХрд┐рдпрд╛ред рдЖрдк рдПрдХ 
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡реГрдХреНрд╖ , 
рддреАрди-рдкрддрд╛ рдХреЛрдб , 
рдП-рд╕рд╛рдорд╛рдиреНрдп , 
рдирд┐рд░рдВрддрд░ рдкрд╛рд╕рд┐рдВрдЧ рд╕реНрдЯрд╛рдЗрд▓, рдпрд╛ 
рдПрдХрд▓ рд╕реНрдЯреЗрдЯрд┐рдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрднреНрдпрд╛рд╡реЗрджрди рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рд╣реИред рдпрд╣рд╛рдБ рд╣рдо рдЕрдиреБрдХреВрд▓рдХ рдХреЗ рдЕрдВрджрд░ рдПрдХ "рдХрд╛рд░реНрдпрдХреНрд░рдо" рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред
рд╕реНрд░реЛрдд рдХреЛрдб
 static int ackermann(int m, int n){ if (m == 0) return n + 1; else if (n == 0) return ackermann(m - 1, 1); else return ackermann(m - 1, ackermann(m, n - 1)); } 
рдЕрд╕рдореНрдмрджреНрдз рд╕реНрд░реЛрдд рдХреЛрдб рднреА рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ, рдорд╛рдирд╡-рдкрдардиреАрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рджреЛ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ:
- рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдирд╛рдо рдФрд░ рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд╕рднреА рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП рдмреЗрдХрд╛рд░ рд╣реИрдВред
 
- рд╕рд╣реА рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдФрд░ рдЧрд▓рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ, рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рджреМрд░рд╛рди, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рд╣реА рдЗрдирдкреБрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рд╕рд╣реА рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛред
 
рдпреЗ рдХрд╛рд░рдХ рдЕрдиреБрдХреВрд▓рдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо 
рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ 
рд╕рдХрддреЗ рд╣реИрдВ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреИрдЯрд░реНрди 
рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП 
рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 
рдХрд░рдирд╛ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреЛ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛, рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рдПрдХ рдмрд╣реБрддрд╛рдпрдд рдХреЗ рд╕рд╛рде рдкреИрдЯрд░реНрди рдХреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдкрд╣рдЪрд╛рдирдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдФрд░ рджреВрд╕рд░рд╛ рдХрд╛рд░рдХ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдФрд░ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдореА рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд╣реБрдд рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдпреЗ рдкреНрд░рддрд┐рдмрдВрдз рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдорд╛рдирд╡ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдХреЛрдб рдмреЗрд╕ рдХреЛ 
рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдФрд░ рдХреЛрдб рдмреЗрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдХрд┐рд╕реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рд╕рд╛рд░ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЗ рдкреЗрдбрд╝
 static int ackermann(int m, int n){ if (m == 0) return n + 1; else if (n == 0) return ackermann(m - 1, 1); else return ackermann(m - 1, ackermann(m, n - 1)); } IfElse( cond = BinOp(Ident("m"), "=", Literal(0)), then = Return(BinOp(Ident("n"), "+", Literal(1)), else = IfElse( cond = BinOp(Ident("n"), "=", Literal(0)), then = Return(Call("ackermann", BinOp(Ident("m"), "-", Literal(1)), Literal(1)), else = Return( Call( "ackermann", BinOp(Ident("m"), "-", Literal(1)), Call("ackermann", Ident("m"), BinOp(Ident("n"), "-", Literal(1))) ) ) ) ) 

рд╕рд╛рд░ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЯреНрд░реА (рдПрдПрд╕рдЯреА) рдПрдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рд╛рд░реВрдк рд╣реИред рд╡реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдореВрд░реНрдд рд╕реАрдврд╝реА рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдПрдПрд╕рдЯреА рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рд░ рдирд┐рд░реВрдкрдг рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рддрд░рд╣, рдПрдПрд╕рдЯреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рд╢рдмреНрджрд╛рд░реНрде рд╕рдорд╛рди рд╣реИрдВ; рд╡реЗ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдирд╛рдо рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдПрд╕рдЯреА рд╣реЛрддреЗ рд╣реИрдВ:
 static int ackermannA(int m, int n){ int p = n; int q = m; if (q == 0) return p + 1; else if (p == 0) return ackermannA(q - 1, 1); else return ackermannA(q - 1, ackermannA(q, p - 1)); } Block( Assign("p", Ident("n")), Assign("q", Ident("m")), IfElse( cond = BinOp(Ident("q"), "==", Literal(0)), then = Return(BinOp(Ident("p"), "+", Literal(1)), else = IfElse( cond = BinOp(Ident("p"), "==", Literal(0)), then = Return(Call("ackermann", BinOp(Ident("q"), "-", Literal(1)), Literal(1)), else = Return( Call( "ackermann", BinOp(Ident("q"), "-", Literal(1)), Call("ackermann", Ident("q"), BinOp(Ident("p"), "-", Literal(1))) ) ) ) ) ) static int ackermannB(int m, int n){ int r = n; int s = m; if (s == 0) return r + 1; else if (r == 0) return ackermannB(s - 1, 1); else return ackermannB(s - 1, ackermannB(s, r - 1)); } Block( Assign("r", Ident("n")), Assign("s", Ident("m")), IfElse( cond = BinOp(Ident("s"), "==", Literal(0)), then = Return(BinOp(Ident("r"), "+", Literal(1)), else = IfElse( cond = BinOp(Ident("r"), "==", Literal(0)), then = Return(Call("ackermann", BinOp(Ident("s"), "-", Literal(1)), Literal(1)), else = Return( Call( "ackermann", BinOp(Ident("s"), "-", Literal(1)), Call("ackermann", Ident("s"), BinOp(Ident("r"), "-", Literal(1))) ) ) ) ) ) 
рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рдПрдПрд╕рдЯреАрдПрд╕ рдореЗрдВ рдПрдХ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рдиреЛрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдкреЗрдбрд╝реЛрдВ рдХреА рддрд░рд╣ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ: 
Ident("r") рдФрд░ 
Ident("s") рдХреЗ рдорд╛рди рдЙрдирдХреЗ рдЙрдкрдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрдкрд╕реНрдЯреНрд░реАрдо 
Assign("r", ...) рдиреЛрдб 
Ident("s") рдирд┐рд░реНрдзрд╛рд░рд┐рдд 
Ident("s") рд╣реИрдВред 
Assign("r", ...) рдФрд░ 
Assign("s", ...) ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, 
Ident рдФрд░ 
Assign рдмреАрдЪ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд░реНрде рд╕рдВрдмрдВрдз рд╣реИрдВ рдЬреЛ рдПрдПрд╕рдЯреА рдЯреНрд░реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ:

рдпреЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрдХреНрд░ рд╕рд╣рд┐рдд рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЧреНрд░рд╛рдл рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред
рдмрд╛рдИрдЯрдХреЛрдб
рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдЬрд╛рд╡рд╛ рдХреЛ рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ .class рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ Java bytecode рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ 
ackermann рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ:
 static int ackermann(int m, int n){ if (m == 0) return n + 1; else if (n == 0) return ackermann(m - 1, 1); else return ackermann(m - 1, ackermann(m, n - 1)); } 
рдпрд╣ рдЗрд╕ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:
  0: iload_0 1: ifne 8 4: iload_1 5: iconst_1 6: iadd 7: ireturn 8: iload_1 9: ifne 20 12: iload_0 13: iconst_1 14: isub 15: iconst_1 16: invokestatic ackermann:(II)I 19: ireturn 20: iload_0 21: iconst_1 22: isub 23: iload_0 24: iload_1 25: iconst_1 26: isub 27: invokestatic ackermann:(II)I 30: invokestatic ackermann:(II)I 33: ireturn 
рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (JVM), рдЬреЛ рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдПрдХ рд╕реНрдЯреИрдХ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдПрдХ рдорд╢реАрди рд╣реИ: рдЗрд╕рдореЗрдВ рдСрдкрд░реЗрдВрдбреНрд╕ (STACK) рдХрд╛ рдПрдХ рд╕реНрдЯреИрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝-рддреЛрдбрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ (LOCALS) рдХреА рдПрдХ рд╕рд░рдгреА рдЬрд┐рд╕рдореЗрдВ рдпреЗ рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд╛рдиреАрдп рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рдкрд╣рд▓реЗ рдПрди рд╕реНрд▓реЙрдЯреНрд╕ рдореЗрдВ рдПрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреИрдХ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрди рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдЪрд░ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рдХреЙрд▓ рдХреЛ рдСрдкреЗрд░реИрдВрдб рд╕реНрдЯреИрдХ рд╕реЗ рдореВрд▓реНрдп 
return рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдмреБрд▓рд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рд╕реНрдЯреИрдХ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдмреАрдЪ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдиреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рджрд┐рдП рдЧрдП рдмрд╛рдИрдЯреЗрдХреЛрдб рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
  BYTECODE LOCALS STACK |a0|a1| | 0: iload_0 |a0|a1| |a0| 1: ifne 8 |a0|a1| | 4: iload_1 |a0|a1| |a1| 5: iconst_1 |a0|a1| |a1| 1| 6: iadd |a0|a1| |v1| 7: ireturn |a0|a1| | 8: iload_1 |a0|a1| |a1| 9: ifne 20 |a0|a1| | 12: iload_0 |a0|a1| |a0| 13: iconst_1 |a0|a1| |a0| 1| 14: isub |a0|a1| |v2| 15: iconst_1 |a0|a1| |v2| 1| 16: invokestatic ackermann:(II)I |a0|a1| |v3| 19: ireturn |a0|a1| | 20: iload_0 |a0|a1| |a0| 21: iconst_1 |a0|a1| |a0| 1| 22: isub |a0|a1| |v4| 23: iload_0 |a0|a1| |v4|a0| 24: iload_1 |a0|a1| |v4|a0|a1| 25: iconst_1 |a0|a1| |v4|a0|a1| 1| 26: isub |a0|a1| |v4|a0|v5| 27: invokestatic ackermann:(II)I |a0|a1| |v4|v6| 30: invokestatic ackermann:(II)I |a0|a1| |v7| 33: ireturn |a0|a1| | 
рдпрд╣рд╛рдВ, 
a0 рдФрд░ 
a1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП 
a1 рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП, рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрд░рдВрдн рдореЗрдВ LOCALS рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред 
1 iconst_1 рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдФрд░ 
v1 рд╕реЗ 
v7 , рдордзреНрдпрд╡рд░реНрддреА рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред 
v1 , 
v3 рдФрд░ 
v7 рд▓реМрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди 
ireturn рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЕрдиреНрдп рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП LOCALS рд╕рд░рдгреА рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИред
рдКрдкрд░, рд╣рдордиреЗ рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреЛ рд╡реЗрд░рд┐рдПрдВрдЯ рджреЗрдЦреЗ - 
ackermannA рдФрд░ 
ackermannB ред рдЗрд╕рд▓рд┐рдП рд╡реЗ рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рджрд┐рдЦрддреЗ рд╣реИрдВ:
  BYTECODE LOCALS STACK |a0|a1| | 0: iload_1 |a0|a1| |a1| 1: istore_2 |a0|a1|a1| | 2: iload_0 |a0|a1|a1| |a0| 3: istore_3 |a0|a1|a1|a0| | 4: iload_3 |a0|a1|a1|a0| |a0| 5: ifne 12 |a0|a1|a1|a0| | 8: iload_2 |a0|a1|a1|a0| |a1| 9: iconst_1 |a0|a1|a1|a0| |a1| 1| 10: iadd |a0|a1|a1|a0| |v1| 11: ireturn |a0|a1|a1|a0| | 12: iload_2 |a0|a1|a1|a0| |a1| 13: ifne 24 |a0|a1|a1|a0| | 16: iload_3 |a0|a1|a1|a0| |a0| 17: iconst_1 |a0|a1|a1|a0| |a0| 1| 18: isub |a0|a1|a1|a0| |v2| 19: iconst_1 |a0|a1|a1|a0| |v2| 1| 20: invokestatic ackermannA:(II)I |a0|a1|a1|a0| |v3| 23: ireturn |a0|a1|a1|a0| | 24: iload_3 |a0|a1|a1|a0| |a0| 25: iconst_1 |a0|a1|a1|a0| |a0| 1| 26: isub |a0|a1|a1|a0| |v4| 27: iload_3 |a0|a1|a1|a0| |v4|a0| 28: iload_2 |a0|a1|a1|a0| |v4|a0|a1| 29: iconst_1 |a0|a1|a1|a0| |v4|a0|a1| 1| 30: isub |a0|a1|a1|a0| |v4|a0|v5| 31: invokestatic ackermannA:(II)I |a0|a1|a1|a0| |v4|v6| 34: invokestatic ackermannA:(II)I |a0|a1|a1|a0| |v7| 37: ireturn |a0|a1|a1|a0| | 
рдЪреВрдВрдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рджреЛ рддрд░реНрдХреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рдмрд╛рдпреЛрдЯреЗрдХ рдореЗрдВ LOCAL рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ 0 рдФрд░ 1 рд╕реЗ рддрд░реНрдХ рдорд╛рдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ 2 рдФрд░ 3 рдХреЗ рддрд╣рдд рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, bytecode рдЖрдкрдХреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдирд╛рдореЛрдВ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ: рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ LOCALS рд╕рд░рдгреА рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рд╕рд╛рдеред рдЗрд╕рд▓рд┐рдП, 
ackermannA рдФрд░ 
ackermannB рд╕рдорд╛рди 
ackermannB рд╣реЛрдВрдЧреЗред рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рдордХрдХреНрд╖ рд╣реИрдВ!
рд╣рд╛рд▓рд╛рдБрдХрд┐, 
ackermannA рдФрд░ 
ackermannB рдХреЛ рдореВрд▓ 
ackermann рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА 
ackermannB рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╣рд╛рд▓рд╛рдБрдХрд┐, bytecode рдХреЛ рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рдирд╛рдо рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рдЗрди рдЪрд░реЛрдВ рд╕реЗ рд▓реЛрдбрд┐рдВрдЧ / рд╕реЗрд╡рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдореВрд░реНрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдорд╛рди LOCALS рдФрд░ STACK рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд▓реЛрдбрд┐рдВрдЧ / рд╕реЗрд╡рд┐рдВрдЧ рд╕реЗ рдЕрдореВрд░реНрддрддрд╛ рдХреА рдХрдореА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╛рдпреЛрдЯреЗрдХ рдореЗрдВ рдПрдХ рдФрд░ рдЦрд╛рдореА рд╣реИ: рдЕрдзрд┐рдХрд╛рдВрд╢ рд░реИрдЦрд┐рдХ рдЕрд╕реЗрдВрдмрд▓рд░реЛрдВ рдХреА рддрд░рд╣, рдпрд╣ рдХреЙрдореНрдкреИрдХреНрдЯрдиреЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрд╣реБрдд рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ, рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдореВрд▓ 
ackermann рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:
  BYTECODE LOCALS STACK |a0|a1| | 0: iload_0 |a0|a1| |a0| 1: ifne 8 |a0|a1| | 4: iload_1 |a0|a1| |a1| 5: iconst_1 |a0|a1| |a1| 1| 6: iadd |a0|a1| |v1| 7: ireturn |a0|a1| | 8: iload_1 |a0|a1| |a1| 9: ifne 20 |a0|a1| | 12: iload_0 |a0|a1| |a0| 13: iconst_1 |a0|a1| |a0| 1| 14: isub |a0|a1| |v2| 15: iconst_1 |a0|a1| |v2| 1| 16: invokestatic ackermann:(II)I |a0|a1| |v3| 19: ireturn |a0|a1| | 20: iload_0 |a0|a1| |a0| 21: iconst_1 |a0|a1| |a0| 1| 22: isub |a0|a1| |v4| 23: iload_0 |a0|a1| |v4|a0| 24: iload_1 |a0|a1| |v4|a0|a1| 25: iconst_1 |a0|a1| |v4|a0|a1| 1| 26: isub |a0|a1| |v4|a0|v5| 27: invokestatic ackermann:(II)I |a0|a1| |v4|v6| 30: invokestatic ackermann:(II)I |a0|a1| |v7| 33: ireturn |a0|a1| | 
рдЪрд▓реЛ рдПрдХ рдореЛрдЯрд╛ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ: рдлрд╝рдВрдХреНрд╢рди рдХреЛ 
30: invokestatic ackermann:(II)I рдХреЙрд▓ рдХрд░реЗрдВ 
30: invokestatic ackermann:(II)I рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ 
30: invokestatic ackermann:(II)I ред рдФрд░ рдлрд┐рд░ рдЗрд╕ рдХреЙрд▓ рдХреЛ рд╕рдордХрдХреНрд╖ рдХреЙрд▓ 
30: invokestatic ackermann2:(I)I рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдХреВрд▓рди рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ 
30: invokestatic ackermann:(II)I рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП "рдореГрдд рдХреЛрдб рд╣рдЯрд╛рдиреЗ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ 
30: invokestatic ackermann:(II)IрдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдирд┐рд░реНрджреЗрд╢ 
30 рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдмрд▓реНрдХрд┐ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рднреА рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреА рдЧрдгрдирд╛ рдХрд╣рд╛рдВ рдХреА рдЧрдИ рд╣реИ ( 
v4 рдореЗрдВ 
v4 ), рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛ рднреА рджреЗрдВред рд╣рдо 
30 рд╕реЗ 
22 , рдФрд░ 
22 рд╕реЗ 
21 рдФрд░ 
20 рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рд▓реМрдЯрддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг:
  BYTECODE LOCALS STACK |a0|a1| | 0: iload_0 |a0|a1| |a0| 1: ifne 8 |a0|a1| | 4: iload_1 |a0|a1| |a1| 5: iconst_1 |a0|a1| |a1| 1| 6: iadd |a0|a1| |v1| 7: ireturn |a0|a1| | 8: iload_1 |a0|a1| |a1| 9: ifne 20 |a0|a1| | 12: iload_0 |a0|a1| |a0| 13: iconst_1 |a0|a1| |a0| 1| 14: isub |a0|a1| |v2| 15: iconst_1 |a0|a1| |v2| 1| 16: invokestatic ackermann:(II)I |a0|a1| |v3| 19: ireturn |a0|a1| | - 20: iload_0 |a0|a1| | - 21: iconst_1 |a0|a1| | - 22: isub |a0|a1| | 23: iload_0 |a0|a1| |a0| 24: iload_1 |a0|a1| |a0|a1| 25: iconst_1 |a0|a1| |a0|a1| 1| 26: isub |a0|a1| |a0|v5| 27: invokestatic ackermann:(II)I |a0|a1| |v6| - 30: invokestatic ackermann:(II)I |a0|a1| |v7| + 30: invokestatic ackermann2:(I)I |a0|a1| |v7| 33: ireturn |a0|a1| | 
рд╣рдо рдЕрднреА рднреА рдПрдХ рд╕рд╛рдзрд╛рд░рдг 
ackermann рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдХрдИ, рдкрд░рд╕реНрдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдЫреЛрдЯреЗ рдЕрд░реНрде рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкреВрд░реЗ рдмрд╛рдпреЛрдЯреЗрдХ рдореЗрдВ рдХрдИ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ LOCALS рдФрд░ STACK рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рд╣реИ: рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ 
v4 рдирд┐рд░реНрджреЗрд╢ 
22 рд╕реЗ рдирд┐рд░реНрджреЗрд╢ 
30 рддрдХ рдХреИрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ 
22 a0 рдФрд░ 
1 рдбреЗрдЯрд╛ рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд░реНрджреЗрд╢ 
21 рдФрд░ 
20 рд╕реЗ рдЖрддреЗ рд╣реИрдВред рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЧреНрд░рд╛рдл рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ LOCALS рдФрд░ STACK рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдЗрд╕рдХреЗ рдЖрдЧреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕реНрдерд╛рди рдкрд░ред
рд╣рдорд╛рд░реЗ рдПрдПрд╕рдЯреАрдПрд╕ рдореЗрдВ 
Ident / 
Assign рдЬреЛрдбрд╝реЗ рдХреА рддрд░рд╣, LOCALS рдФрд░ STACK рдХреЗ рдмреАрдЪ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдФрд░ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рддреЗ рд╣реИрдВред рддреЛ рд╣рдо рд╕реАрдзреЗ рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╢реБрд░реВ рдХрд░рддреЗ?
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд░реЗрдЦрд╛рдВрдХрди
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд░реЗрдЦрд╛рдВрдХрди рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЗ рдмрд╛рдж рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдЕрдЧрд▓рд╛ рд╕реНрддрд░ рд╣реИред рдпрджрд┐ рд╣рдо 
Ident / 
Assign рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдкреЗрдбрд╝ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдмрд╛рдпрдЯреЗрдХреЛрдб LOCALS рдФрд░ STACK рдХреЗ рдмреАрдЪ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред 
ackermann рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП 
ackermann рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдПрдПрд╕рдЯреА рдпрд╛ рдЬрд╛рд╡рд╛ рд╕реНрдЯреИрдХ-рдмрд╛рдпрдЯреЗрдХреЛрдб рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЗ рд╡рд┐рдкрд░реАрдд, рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдЧреНрд░рд╛рдлрд╝ рдПрдХ "рд╕реНрдерд╛рдиреАрдп рдЪрд░" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдореВрд▓реНрдп рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдмреАрдЪ рд╕реАрдзреЗ рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдмрд╛рдпрдЯреЗрдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдорд╛рди рдХреИрд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ; рдПрдПрд╕рдЯреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдкреЗрдбрд╝ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдФрд░ 
Assign / 
Ident рд╕рдВрдШреЛрдВ рдХреЗ рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ; рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд░реЗрдЦрд╛рдВрдХрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЕрдХреНрд╕рд░ рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рдПрдХ рд╕реАрдзрд╛ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╣реИ - рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдкрддрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ "рдЪрд▓рддреА рдореВрд▓реНрдпреЛрдВ" рдХрд╛ рд╢реБрджреНрдз рд╡рд┐рдЪрд╛рд░ред
рд░реЗрдЦреАрдп рдмрд╛рдЗрдЯрдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 
ackermann рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рднреА рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ: 
ackermann рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдиреЛрдб рдХреЛ 
ackermann рдХреЙрд▓ рдХреЗ рд╕рд╛рде 
ackermann рдФрд░ рдПрдХ рддрд░реНрдХ рдХреЛ 
ackermann рдмрд╕ рдЧреНрд░рд╛рдлрд╝ рдиреЛрдб (рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд) рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЯреНрд░рд╛рдВрдЬрд┐рдЯ рдиреЛрдбреНрд╕ (рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд) рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдирдкреБрдЯ рд▓рд┐рдВрдХ рдХреЛ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реИ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, 
ackermann(int n, int m) рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдо ( 
ackermann(int n, int m) рдЬрдЧрд╣) рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдмрджрд▓рд╛рд╡ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдЧреНрд░рд╛рдл рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд░реЗрдЦреАрдп рдмрд╛рдЗрдЯрдХреЛрдб рдпрд╛ рдПрдПрд╕рдЯреА рдХреЗ рд╕рд╛рде рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ: рд╡реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдФрд░ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВред
рдЧреНрд░рд╛рдлрд╝ рдХреЗ рдЗрд╕ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИрдВ: рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднреМрддрд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд╛рдЬреНрдп рдФрд░ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ, рдЬреЛ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕рд╕реЗ рдкрд░реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИрдВред рдореИрдВрдиреЗ рдЧреНрд░рд╛рдлрд╝ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдирд┐рдХрд╛рд▓рдирд╛, рдЖрдЧреЗ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рд╕рдВрдХреНрд░рдордг, рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕рдВрдХреНрд░рдордг (рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдЧрд╣рд░рд╛рдИ рдореЗрдВ), рдЖрджрд┐ред рдпрджрд┐ рдЖрдкрдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред ред
рдЕрдВрдд рдореЗрдВ, рд╣рдордиреЗ рд░реИрдЦрд┐рдХ рдмрд╛рдпреЛрдЯреЗрдХ рд╕реЗ рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП рд░реВрдкрд╛рдВрддрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдЧреНрд░рд╛рдл рд╕реЗ рд╡рд╛рдкрд╕ рдмрд╛рдпрдЯреЗрдХреЛрдб рддрдХред рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред
рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдХреБрдЫ рддрдереНрдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЙрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗред рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдХрдИ рдЕрдиреБрдХреВрд▓рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ:
- рд▓рдЧрд╛рддрд╛рд░ рддрд╣: рдХреНрдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЬреНрдЮрд╛рдд рдирд┐рд░рдВрддрд░ рдореВрд▓реНрдп рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЧрдгрдирд╛ рд╢реБрджреНрдз рд╣реИ?
 
- рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ: рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдХреЙрд▓ рд╡рд┐рдзрд┐ рдХреЗ рдПрдХрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
 
- : ?
 
- : ┬л┬╗? - ? ?
 
- : , ?
 
, , , . , , , .
, , , тАФ , . .
(Inference Lattice)
, . , ┬л┬╗ - :
- Integer?- String?- Array[Float]?- PrintLogger?
 
- CharSequence?- String, -- StringBuilder?
 
- Any, , ?
 
:

: , 
"hello" String , 
String CharSequence . 
"hello" , (Singleton Type) тАФ . :

, , . , . , , , 
String StringBuilder , , : 
CharSequence . , 
0 , 
1 , 
2 , , 
Integer .

, , :

, , . , .
count
main :
 static int main(int n){ int count = 0, multiplied = 0; while(count < n){ if (multiplied < 100) logger.log(count); count += 1; multiplied *= count; } return ...; } 
ackermann , 
count , 
multiplied logger . :

, 
count 0 block0 . 
block1 , , 
count < n : , 
block3 return , 
block2 , 
count 1 count , 
block1 . , 
< false , 
block3 .
?
- block0. ,- count = 0.
 
- block1, ,- n( ,- Integer), ,- if.- block2- block3.
- block3, ,- block1b,- block2, ,- block1c. ,- block2- count, 1- count.
- , count01:countInteger.
- : block1ncountInteger.
 
- block2,- count- Integer + 1 -> Integer. ,- count- Integer, .
 
multiplied
, 
multiplied :
- block0. ,- multiplied- 0.
 
- block1, , .- block2- block3( ).
 
- block2,- block2(- 0)- count(- Integer).- 0 * Integer -> 0,- multiplied- 0.
 
- block1- block2.- multiplied- 0, .
 
multiplied 0 , , :
- multiplied < 100- true.
 
- if (multiplied < 100) logger.log(count);- logger.log(count).
 
- , multiplied, ,0.
 
:

:

:
 static int main(int n){ int count = 0; while(count < n){ logger.log(count); count += 1; } return ...; } 
, , , , .
multiplied -> 0 , , . , , . , .
, . :
count , 
multiplied . , 
multiplied count , 
count multiplied . , .
, тАФ : , . , ( ) . .
while , , 
O( ) . (, ) , , .
, .
, . , , , , .
. :
 static int main(int n){ return called(n, 0); } static int called(int x, int y){ return x * y; } 
:

main :
- main(n)
 - called(n, 0)
 
- called(n, 0)- 0
 
- main(n)- 0
 
, , . .
, 
called(n, 0) 0 , :

:
 static int main(int n){ return 0; } 
: A B, C, D, D C, B, D A. A B B A, A A, , !
, Java:
 public static Any factorial(int n) { if (n == 1) { return 1; } else { return n * factorial(n - 1); } } 
n int , 
Any : . , 
factorial int ( 
Integer ). 
factorial , 
factorial factorial , ! ?
Bottom
Bottom :

┬л , , ┬╗. 
Bottom factorial :

- block0.- n- Integer,- 1- 1,- n == 1,- true- false.
 
- true:- return- 1.
 
- false- n - 1- n- Integer.
 
- factorialтАФ ,- Bottom.
 
- *- n: Integer- factorial:- Bottom- Bottom.
 
- return- Bottom.
- factorial- 1- Bottom,- 1.
 
- 1- factorial,- Bottom.
 
- Integer * 1- Integer.
 
- return- Integer.
- factorial- Integer- 1,- Integer.
 
- factorial,- Integer.- *- n: Integer- factorial: Integer,- Integer, .
 
factorial Integer , , .
, . 
Bottom , , .
* :
- (n: Integer) * (factorial: Bottom)
 
- (n: Integer) * (factorial: 1)
 
- (n: Integer) * (factorial: Integer)
 
multiplied , 
O( ) . , , .
тАФ , ┬л ┬╗. , (┬л ┬╗), , (┬л ┬╗). .
main :
 static int main(int n){ int count = 0, total = 0, multiplied = 0; while(count < n){ if (multiplied > 100) count += 1; count += 1; multiplied *= 2; total += 1; } return count; } 
, 
if (multiplied > 100) multiplied *= count multiplied *= 2 . .
, :
- multiplied > 100- true,- count += 1(┬л┬╗).
 
- total, (┬л┬╗).
 
, :
 static int main(int n){ int count = 0; while(count < n){ count += 1; } return count; } 
, .
:

, , : 
block0 , 
block1 , , 
block1b , , 
block1c , , 
return block3 .
, 
multiplied -> 0 , :

:

, 
block1b ( 
0 > 100 ) 
true . 
false block1c ( 
if ):

, ┬л ┬╗ 
total > , - , , . , 
return , 
: 
> , 
100 , 
0 block1b , 
total , 
0 , 
+ 1 , 
total block0 block2 . :

┬л┬╗ :
 static int main(int n){ int count = 0; while(count < n){ count += 1; } return count; } 
рдирд┐рд╖реНрдХрд░реНрд╖
:
- -.
 
- , .
 
- , . .
 
- : ┬л┬╗ ┬л┬╗ , , .
 
- : , .
 
- , .
 
, , .
, . . , :