[{"data":1,"prerenderedAt":210},["ShallowReactive",2],{"term-t\u002Ftail-call":3,"related-t\u002Ftail-call":195},{"id":4,"title":5,"acronym":6,"body":7,"category":176,"description":177,"difficulty":178,"extension":179,"letter":180,"meta":181,"navigation":182,"path":183,"related":184,"seo":189,"sitemap":190,"stem":193,"subcategory":6,"__hash__":194},"terms\u002Fterms\u002Ft\u002Ftail-call.md","Tail Call",null,{"type":8,"value":9,"toc":170},"minimark",[10,15,19,23,26,30,159,163,166],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 - The Vibe Check",[16,17,18],"p",{},"A tail call is when a function's very last action is to call another function and immediately return whatever that call gives back, nothing left to do afterward. Some languages notice this pattern and reuse the current function's stack space instead of piling a new frame on top, which means a recursive function written as a tail call can loop forever without ever blowing the stack, in languages that actually bother to optimize for it.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"A tail call occurs when a function's final action is invoking another function and immediately returning its result with no further computation. Tail call optimization (TCO) lets a compiler or runtime reuse the current stack frame for the called function instead of pushing a new one, turning tail-recursive functions into effectively constant-stack-space loops. Languages like Scheme guarantee TCO, while others, including Python and most JavaScript engines, do not.",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Tail-recursive: the recursive call is the last thing that happens\nfunction sum(n, acc = 0) {\n  if (n === 0) return acc;\n  return sum(n - 1, acc + n); \u002F\u002F tail call\n}\n","javascript","",[38,39,40,49,87,117,153],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Tail-recursive: the recursive call is the last thing that happens\n",[41,50,52,56,60,64,68,71,74,77,81,84],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","function",[41,57,59],{"class":58},"s2Zo4"," sum",[41,61,63],{"class":62},"sMK4o","(",[41,65,67],{"class":66},"sHdIc","n",[41,69,70],{"class":62},",",[41,72,73],{"class":66}," acc",[41,75,76],{"class":62}," =",[41,78,80],{"class":79},"sbssI"," 0",[41,82,83],{"class":62},")",[41,85,86],{"class":62}," {\n",[41,88,90,94,98,101,104,106,109,112,114],{"class":43,"line":89},3,[41,91,93],{"class":92},"s7zQu","  if",[41,95,97],{"class":96},"swJcz"," (",[41,99,67],{"class":100},"sTEyZ",[41,102,103],{"class":62}," ===",[41,105,80],{"class":79},[41,107,108],{"class":96},") ",[41,110,111],{"class":92},"return",[41,113,73],{"class":100},[41,115,116],{"class":62},";\n",[41,118,120,123,125,127,129,132,135,137,139,142,145,147,150],{"class":43,"line":119},4,[41,121,122],{"class":92},"  return",[41,124,59],{"class":58},[41,126,63],{"class":96},[41,128,67],{"class":100},[41,130,131],{"class":62}," -",[41,133,134],{"class":79}," 1",[41,136,70],{"class":62},[41,138,73],{"class":100},[41,140,141],{"class":62}," +",[41,143,144],{"class":100}," n",[41,146,83],{"class":96},[41,148,149],{"class":62},";",[41,151,152],{"class":47}," \u002F\u002F tail call\n",[41,154,156],{"class":43,"line":155},5,[41,157,158],{"class":62},"}\n",[11,160,162],{"id":161},"when-youll-hear-this","When You'll Hear This",[16,164,165],{},"\"Rewrite it as a tail call so it doesn't blow the stack on deep recursion.\" \u002F \"Don't count on tail call optimization in JavaScript, most engines don't actually do it.\"",[167,168,169],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":51,"depth":51,"links":171},[172,173,174,175],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":161,"depth":51,"text":162},"languages","A tail call is when a function's very last action is to call another function and immediately return whatever that call gives back, nothing left to do afte...","intermediate","md","t",{},true,"\u002Fterms\u002Ft\u002Ftail-call",[185,186,187,188],"Escape Analysis","Recursion","Stack Overflow","JIT Warmup",{"title":5,"description":177},{"changefreq":191,"priority":192},"weekly",0.7,"terms\u002Ft\u002Ftail-call","r8qgW0SPlmcjLKttoYq_IIL6sURp9PeOGCJLR35cJ-U",[196,200,203,207],{"title":185,"path":197,"acronym":6,"category":176,"difficulty":198,"description":199},"\u002Fterms\u002Fe\u002Fescape-analysis","advanced","Escape analysis is a compiler playing detective, trying to prove that an object you allocated never actually escapes the function it was created in, meanin...",{"title":188,"path":201,"acronym":6,"category":176,"difficulty":198,"description":202},"\u002Fterms\u002Fj\u002Fjit-warmup","A JIT compiler starts out running your code the slow, simple way, an interpreter, while it quietly watches which parts get called the most.",{"title":186,"path":204,"acronym":6,"category":205,"difficulty":178,"description":206},"\u002Fterms\u002Fr\u002Frecursion","general","Recursion is when a function calls itself to solve a smaller version of the same problem, like a set of Russian nesting dolls.",{"title":187,"path":208,"acronym":6,"category":205,"difficulty":178,"description":209},"\u002Fterms\u002Fs\u002Fstack-overflow","A stack overflow happens when a function keeps calling itself forever, like a mirror facing a mirror.",1792528129133]