{"id":8478,"date":"2021-04-27T18:15:47","date_gmt":"2021-04-27T18:15:47","guid":{"rendered":"https:\/\/prwatech.in\/blog\/?p=8478"},"modified":"2024-04-13T09:26:14","modified_gmt":"2024-04-13T09:26:14","slug":"scala-tail-recursion","status":"publish","type":"post","link":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/","title":{"rendered":"Scala &#8211; Tail Recursion"},"content":{"rendered":"\r\n<h2><span data-sheets-root=\"1\" data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Tail Recursion in Scala&quot;}\" data-sheets-userformat=\"{&quot;2&quot;:6145,&quot;3&quot;:{&quot;1&quot;:0,&quot;3&quot;:1},&quot;14&quot;:{&quot;1&quot;:3,&quot;3&quot;:1},&quot;15&quot;:&quot;Arial&quot;}\">Tail Recursion in Scala<\/span><\/h2>\r\n<p>&nbsp;<\/p>\r\n<p>The <strong>tail recursive<\/strong> function are effective than non tail <a href=\"https:\/\/prwatech.in\/blog\/#\">recursive<\/a> functions since tail-recursion can be enhanced by <a href=\"http:\/\/scala-lang.org\">compiler<\/a>. A recursive function is supposed to be tail recursive if the recursive call is the last thing done by the function. There is no reason to keep record of the past state. \u00a0<\/p>\r\n\r\n\r\n\r\n<p>tail recursion function uses a package\u00a0<strong>import scala.annotation.tailrec<\/strong>\u00a0 in the program.<\/p>\r\n<div class=\"flex-1 overflow-hidden\">\r\n<div class=\"react-scroll-to-bottom--css-kloqy-79elbk h-full\">\r\n<div class=\"react-scroll-to-bottom--css-kloqy-1n7m0yu\">\r\n<div class=\"flex flex-col text-sm pb-9\">\r\n<div class=\"w-full text-token-text-primary\" dir=\"auto\" data-testid=\"conversation-turn-166\">\r\n<div class=\"px-4 py-2 justify-center text-base md:gap-6 m-auto\">\r\n<div class=\"flex flex-1 text-base mx-auto gap-3 juice:gap-4 juice:md:gap-6 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group final-completion\">\r\n<div class=\"relative flex w-full flex-col agent-turn\">\r\n<div class=\"flex-col gap-1 md:gap-3\">\r\n<div class=\"flex flex-grow flex-col max-w-full\">\r\n<div class=\"min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&amp;]:mt-5 overflow-x-auto\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"bbf6a4b6-8f0f-4c19-917a-e150f7015a44\">\r\n<div class=\"markdown prose w-full break-words dark:prose-invert light\">\r\n<p>technique used in functional programming languages like Scala to optimize recursive functions by eliminating unnecessary stack frames. In Scala, a function is tail-recursive if the recursive call is the last operation performed in the function body. This allows the Scala compiler to optimize the function into an iterative loop, avoiding stack overflow errors that can occur with traditional recursion.<\/p>\r\n<p>Scala provides the <code>@tailrec<\/code> annotation, which instructs the compiler to check if the function is tail-recursive. If the function meets the criteria for tail recursion, the compiler transforms it into a loop using an iterative process, rather than pushing new stack frames onto the call stack.<\/p>\r\n<p>Tail recursion is particularly useful for writing clean and efficient recursive algorithms in Scala, such as factorial calculations, list processing, and tree traversal. By leveraging tail recursion, developers can write recursive functions that are both elegant and performant, taking advantage of Scala&#8217;s functional programming features while avoiding the limitations of traditional recursive approaches. Understanding and utilizing tail recursion is essential for writing idiomatic and efficient Scala code.<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<button class=\"cursor-pointer absolute z-10 rounded-full bg-clip-padding border text-token-text-secondary border-token-border-light right-1\/2 bg-token-main-surface-primary bottom-5\"><\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<h3><strong>use case 1:<\/strong><\/h3>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>\/\/ Scala program of GCD using recursion\r\nimport scala.annotation.tailrec\r\nobject prwatech {\r\n\/\/ Function defined\r\ndef GCD(x: Int, y: Int): Int =\r\n{\r\n\/\/ tail recursion function defined\r\n@tailrec def gcd(a:Int, b:Int): Int=\r\n{\r\nif (b == 0) a\r\nelse gcd(b, a % b)\r\n}\r\ngcd(y, x)\r\n}\r\n\/\/ Main method \r\ndef main(args:Array[String]) \r\n{ \r\n    println(GCD(5, 10)) \r\n}   \r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>output<\/strong>:<\/p>\r\n\r\n\r\n\r\n<p>5<\/p>\r\n\r\n\r\n\r\n<p><strong>use case 2:<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>\/\/ Scala program of factorial with tail recursion\r\nimport scala.annotation.tailrec\r\nobject eduprwa {\r\n\/\/ Function defined\r\ndef factorial(n: Int): Int =\r\n{\r\n\/\/ Using tail recursion\r\n@tailrec def factorialAcc(acc: Int, n: Int): Int =\r\n{\r\nif (n &lt;= 1)\r\nacc\r\nelse\r\nfactorialAcc(n * acc, n - 1)\r\n}\r\nfactorialAcc(1, n)\r\n}\r\n\/\/ Main method \r\ndef main(args:Array[String]) \r\n{ \r\n    println(factorial(6)) \r\n} \r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>output:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>720<\/p>\r\n\r\n\r\n\r\n<p><strong>use case 3:<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>\/\/ Scala program of factorial with tail recursion\r\nimport scala.annotation.tailrec\r\nobject eduprwa {\r\n\/\/ Function defined\r\ndef factorial(n: Double): Double =\r\n{\r\n\/\/ Using tail recursion\r\n@tailrec def factorialAcc(acc: Double, n: Double): Double =\r\n{\r\nif (n &lt;= 1)\r\nacc\r\nelse\r\nfactorialAcc(n * acc, n - 2)\r\n}\r\nfactorialAcc(1, n)\r\n}\r\n\/\/ Main method \r\ndef main(args:Array[String]) \r\n{ \r\n    println(factorial(5.4)) \r\n} \r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>output<\/strong><\/p>\r\n\r\n\r\n\r\n<p>25.70400000000001<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Tail Recursion in Scala &nbsp; The tail recursive function are effective than non tail recursive functions since tail-recursion can be enhanced by compiler. A recursive function is supposed to be tail recursive if the recursive call is the last thing done by the function. There is no reason to keep record of the past state. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[565,1698],"tags":[1196,1188,1190,1192,1189,1187,1195,1197,1191,1194],"class_list":["post-8478","post","type-post","status-publish","format-standard","hentry","category-scala","category-scala-modules-scala","tag-define-tail-recursion-in-scala","tag-scala-tail-recursion","tag-scala-tail-recursion-function","tag-scala-tail-recursive-definition","tag-scala-tail-recursive-function","tag-tail-recursion","tag-tail-recursion-in-scala","tag-tail-recursive-function-in-scala","tag-tail-recursive-use-cases-in-scala","tag-what-is-tail-recursion"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Tail Recursion in Scala - Prwayech<\/title>\n<meta name=\"description\" content=\"Master Tail Recursion in Scala - Dive deep with our expert instructors and comprehensive curriculum, Enroll now.\" \/>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tail Recursion in Scala - Prwayech\" \/>\n<meta property=\"og:description\" content=\"Master Tail Recursion in Scala - Dive deep with our expert instructors and comprehensive curriculum, Enroll now.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/\" \/>\n<meta property=\"og:site_name\" content=\"Prwatech\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prwatech.in\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-27T18:15:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-13T09:26:14+00:00\" \/>\n<meta name=\"author\" content=\"Prwatech\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Eduprwatech\" \/>\n<meta name=\"twitter:site\" content=\"@Eduprwatech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prwatech\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/\",\"url\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/\",\"name\":\"Tail Recursion in Scala - Prwayech\",\"isPartOf\":{\"@id\":\"https:\/\/prwatech.in\/blog\/#website\"},\"datePublished\":\"2021-04-27T18:15:47+00:00\",\"dateModified\":\"2024-04-13T09:26:14+00:00\",\"author\":{\"@id\":\"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3\"},\"description\":\"Master Tail Recursion in Scala - Dive deep with our expert instructors and comprehensive curriculum, Enroll now.\",\"breadcrumb\":{\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/prwatech.in\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Scala &#8211; Tail Recursion\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/prwatech.in\/blog\/#website\",\"url\":\"https:\/\/prwatech.in\/blog\/\",\"name\":\"Prwatech\",\"description\":\"Share Ideas, Start Something Good.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/prwatech.in\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3\",\"name\":\"Prwatech\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prwatech.in\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g\",\"caption\":\"Prwatech\"},\"url\":\"https:\/\/prwatech.in\/blog\/author\/prwatech123\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tail Recursion in Scala - Prwayech","description":"Master Tail Recursion in Scala - Dive deep with our expert instructors and comprehensive curriculum, Enroll now.","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Tail Recursion in Scala - Prwayech","og_description":"Master Tail Recursion in Scala - Dive deep with our expert instructors and comprehensive curriculum, Enroll now.","og_url":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/","og_site_name":"Prwatech","article_publisher":"https:\/\/www.facebook.com\/prwatech.in\/","article_published_time":"2021-04-27T18:15:47+00:00","article_modified_time":"2024-04-13T09:26:14+00:00","author":"Prwatech","twitter_card":"summary_large_image","twitter_creator":"@Eduprwatech","twitter_site":"@Eduprwatech","twitter_misc":{"Written by":"Prwatech","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/","url":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/","name":"Tail Recursion in Scala - Prwayech","isPartOf":{"@id":"https:\/\/prwatech.in\/blog\/#website"},"datePublished":"2021-04-27T18:15:47+00:00","dateModified":"2024-04-13T09:26:14+00:00","author":{"@id":"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3"},"description":"Master Tail Recursion in Scala - Dive deep with our expert instructors and comprehensive curriculum, Enroll now.","breadcrumb":{"@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-tail-recursion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/prwatech.in\/blog\/"},{"@type":"ListItem","position":2,"name":"Scala &#8211; Tail Recursion"}]},{"@type":"WebSite","@id":"https:\/\/prwatech.in\/blog\/#website","url":"https:\/\/prwatech.in\/blog\/","name":"Prwatech","description":"Share Ideas, Start Something Good.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/prwatech.in\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3","name":"Prwatech","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prwatech.in\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g","caption":"Prwatech"},"url":"https:\/\/prwatech.in\/blog\/author\/prwatech123\/"}]}},"_links":{"self":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts\/8478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/comments?post=8478"}],"version-history":[{"count":4,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts\/8478\/revisions"}],"predecessor-version":[{"id":11437,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts\/8478\/revisions\/11437"}],"wp:attachment":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/media?parent=8478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/categories?post=8478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/tags?post=8478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}