SlideShare uma empresa Scribd logo
1 de 17
   Functions In Scala  


                                         Janmejani
                                     Software Consultant    
                                    Knoldus Software LLP
AGENDA
●
    What is Functions.

●
    Local Functions.

●
    First Class Function

●
    Placeholders

●
    Partially Applied Functions

●
    Closures

●
    Repeated Parameters

●
    Tail Recursion
What is Function
➢
    A function is a group of statements that together perform a task.

➢
    When program gets larger, you need some way to divide them
    into smaller more manageable pieces.

➢
    How you divide is up to you, but logically each function perform
     a specific task.
Difference Between Functions And
                   Methods
    Functions                       Methods
➢
    Functions have independent      ➢
                                        Methods do not have
    existence means they can be         independent existence
    defined outside of the class.       they are always defined
                                        with in class.
                                    ➢
                                        Methods are called using
➢
    Functions are called                instance or object.
    independently.
Functions Declaration And Definition

def functionName ([list of parameters]) : [return type]

def functionName ([list of parameters]) : [return type] = {
       function body
       return [expr]
     }

def addInt( a:Int, b:Int ) = {
    var sum = 0
    sum = a + b
    sum
  }
Calling Functions
Following is the standard way to call a
method:

object Test {
   def main(args: Array[String]) {
   println( "Returned Value : " + addInt(5,7) )
   }

    def addInt( a:Int, b:Int ) : a+b
}
Local Functions

Scala allows you to define functions inside a function are called local
functions.

    def factorial(i: Int): Int = {
      def fact(i: Int, factor: Int): Int = {
        if (i <= 1)
           factor
        else
           fact(i - 1, i * factor)
      }
      fact(i, 1)
    }
}
First Class Functions

Scala supports first-class functions,which means you can express
functions in function literal syntax,

 ie. , (x: Int) => x + 1,

A function literal is compiled into a class that when instantiated at run-
time is a function value.

 For eg :

   var increase = (x: Int) => x + 1

   increase(10)
Functions Applied On Functions

foreach:

   It takes a function as an argument and invokes that function on each of
   its elements.

For eg:
           val someNumbers = List(-11, -10, -5, 0, 5, 10)

           SomeNumbers foreach((x: Int) => println(x))
Filters:

   Scala provides a number of ways to leave out redundant information.

   This method selects those elements of a collection that pass a test the
   user supplies.

       For eg:
          someNumbers.filter(x => x > 0)

           someNumbers.filter(_> 0)

   To make a function literal even more concise, you can use underscores
   as placeholders for one or more parameters, so long as each parameter
   appears only one time within the function literal.
Partially Applied Functions
Replace the entire list of parameter.
 For example, rather than writing println(_), you could write println _.

   val someNumbers = List(-11, -10, -5, 0, 5, 10)

   someNumbers.foreach(println _)

A partially applied function is an expression in which you don’t supply all of
the arguments needed by the function. Instead, you supply some, or none, of
the needed arguments.
Closures
 A closure is a function whose return value depends on the value of one or
more variables declared outside this function.
  For eg:
    val multiplier = (i:Int) => i * 10
➢
  A statement with no free variable is called close term.

    val multiplier = (i:Int) => i * factor
➢
  A statement with free variable is called open term.

factor is a free variable
i is a bound variable

The function value (the object) that’s created at runtime from this function
literal is called a closure.
REPEATED PARAMETERS
Scala allows you to indicate that the last parameter to a function may be
Repeated.

This allows clients to pass variable length argument lists to the
Function.

 For eg:
      def Size(is: Int*) = is.length
      println(Size(2,3,4,5,6,67))

To denote a repeated parameter, place an asterisk after the type of
the parameter.
Tail Recursion
In order for a recursive call to be tail recursive, the call back to the function
must be the last action performed in the function.

   def factorial(number:Int) : Int = {
    if (number == 1)
    return 1
        number * factorial (number - 1)
        }
   println(factorial(5))

This is not a tail recursive Function, because the total returned from the
recursive call is being multiplied by number, the recursive call is NOT the
last action performed in the function.
To take this example and make it tail recursive, we must make sure that last
             action performed in the function is the recursive call.


def factorial(fact: Int, number: Int) : Int = {
        if(number == 1)
         return fact
        factorial(number * fact, number - 1)
}
print(factorial(1,5))
Why Tail Recursion?

In the recursion example, notice how the result of each call must be
remembered, to do this each recursive call requires an entry on the stack
until all recursive calls have been made. This makes the recursive call more
expensive in terms of memory.

While in the tail recursive example, there are no intermediate values that
need to be stored on the stack, the intermediate value is always passed back
as a parameter.
Functions In Scala: Local, First Class, Partially Applied & Tail Recursive

Mais conteúdo relacionado

Mais procurados

Abstract class and Interface
Abstract class and InterfaceAbstract class and Interface
Abstract class and InterfaceHaris Bin Zahid
 
Classes,object and methods java
Classes,object and methods javaClasses,object and methods java
Classes,object and methods javaPadma Kannan
 
Core java concepts
Core java  conceptsCore java  concepts
Core java conceptsRam132
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlinintelliyole
 
1. Arrow Functions | JavaScript | ES6
1. Arrow Functions | JavaScript | ES61. Arrow Functions | JavaScript | ES6
1. Arrow Functions | JavaScript | ES6pcnmtutorials
 
Explain Delegates step by step.
Explain Delegates step by step.Explain Delegates step by step.
Explain Delegates step by step.Questpond
 
User defined functions in C programmig
User defined functions in C programmigUser defined functions in C programmig
User defined functions in C programmigAppili Vamsi Krishna
 
Kotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime PerformanceKotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime Performanceintelliyole
 
ArrayList in JAVA
ArrayList in JAVAArrayList in JAVA
ArrayList in JAVASAGARDAVE29
 
Java data types, variables and jvm
Java data types, variables and jvm Java data types, variables and jvm
Java data types, variables and jvm Madishetty Prathibha
 
Hierarchical inheritance
Hierarchical inheritanceHierarchical inheritance
Hierarchical inheritancezindadili
 

Mais procurados (20)

Abstract class and Interface
Abstract class and InterfaceAbstract class and Interface
Abstract class and Interface
 
C# in depth
C# in depthC# in depth
C# in depth
 
Classes,object and methods java
Classes,object and methods javaClasses,object and methods java
Classes,object and methods java
 
Abstract class
Abstract classAbstract class
Abstract class
 
Selenium Locators
Selenium LocatorsSelenium Locators
Selenium Locators
 
Core java concepts
Core java  conceptsCore java  concepts
Core java concepts
 
Introduction to java 8 stream api
Introduction to java 8 stream apiIntroduction to java 8 stream api
Introduction to java 8 stream api
 
Wrapper classes
Wrapper classesWrapper classes
Wrapper classes
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
Vectors in Java
Vectors in JavaVectors in Java
Vectors in Java
 
1. Arrow Functions | JavaScript | ES6
1. Arrow Functions | JavaScript | ES61. Arrow Functions | JavaScript | ES6
1. Arrow Functions | JavaScript | ES6
 
Explain Delegates step by step.
Explain Delegates step by step.Explain Delegates step by step.
Explain Delegates step by step.
 
Java input
Java inputJava input
Java input
 
User defined functions in C programmig
User defined functions in C programmigUser defined functions in C programmig
User defined functions in C programmig
 
Kotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime PerformanceKotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime Performance
 
ArrayList in JAVA
ArrayList in JAVAArrayList in JAVA
ArrayList in JAVA
 
Unit 2 Java
Unit 2 JavaUnit 2 Java
Unit 2 Java
 
Interface in java
Interface in javaInterface in java
Interface in java
 
Java data types, variables and jvm
Java data types, variables and jvm Java data types, variables and jvm
Java data types, variables and jvm
 
Hierarchical inheritance
Hierarchical inheritanceHierarchical inheritance
Hierarchical inheritance
 

Semelhante a Functions In Scala: Local, First Class, Partially Applied & Tail Recursive

Functions & closures
Functions & closuresFunctions & closures
Functions & closuresKnoldus Inc.
 
Functions & Closures in Scala
Functions & Closures in ScalaFunctions & Closures in Scala
Functions & Closures in ScalaKnoldus Inc.
 
Intro f# functional_programming
Intro f# functional_programmingIntro f# functional_programming
Intro f# functional_programmingMauro Ghiani
 
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONSINTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONSKalaivaniD12
 
Functional Objects in Ruby: new horizons – Valentine Ostakh
Functional Objects in Ruby: new horizons  – Valentine OstakhFunctional Objects in Ruby: new horizons  – Valentine Ostakh
Functional Objects in Ruby: new horizons – Valentine OstakhRuby Meditation
 
All About ... Functions
All About ... FunctionsAll About ... Functions
All About ... FunctionsMichal Bigos
 
Principles of functional progrmming in scala
Principles of functional progrmming in scalaPrinciples of functional progrmming in scala
Principles of functional progrmming in scalaehsoon
 
04. WORKING WITH FUNCTIONS-2 (1).pptx
04. WORKING WITH FUNCTIONS-2 (1).pptx04. WORKING WITH FUNCTIONS-2 (1).pptx
04. WORKING WITH FUNCTIONS-2 (1).pptxManas40552
 
Python functions part12
Python functions  part12Python functions  part12
Python functions part12Vishal Dutt
 
Functional programming in clojure
Functional programming in clojureFunctional programming in clojure
Functional programming in clojureJuan-Manuel Gimeno
 
functioninpython-1.pptx
functioninpython-1.pptxfunctioninpython-1.pptx
functioninpython-1.pptxSulekhJangra
 
VIT351 Software Development VI Unit1
VIT351 Software Development VI Unit1VIT351 Software Development VI Unit1
VIT351 Software Development VI Unit1YOGESH SINGH
 

Semelhante a Functions In Scala: Local, First Class, Partially Applied & Tail Recursive (20)

Functions & Closures in Scala
Functions & Closures in ScalaFunctions & Closures in Scala
Functions & Closures in Scala
 
Functions & closures
Functions & closuresFunctions & closures
Functions & closures
 
Functions & Closures in Scala
Functions & Closures in ScalaFunctions & Closures in Scala
Functions & Closures in Scala
 
Python Session - 4
Python Session - 4Python Session - 4
Python Session - 4
 
Intro f# functional_programming
Intro f# functional_programmingIntro f# functional_programming
Intro f# functional_programming
 
Lecture 11 - Functions
Lecture 11 - FunctionsLecture 11 - Functions
Lecture 11 - Functions
 
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONSINTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
 
Functional Objects in Ruby: new horizons – Valentine Ostakh
Functional Objects in Ruby: new horizons  – Valentine OstakhFunctional Objects in Ruby: new horizons  – Valentine Ostakh
Functional Objects in Ruby: new horizons – Valentine Ostakh
 
All About ... Functions
All About ... FunctionsAll About ... Functions
All About ... Functions
 
Principles of functional progrmming in scala
Principles of functional progrmming in scalaPrinciples of functional progrmming in scala
Principles of functional progrmming in scala
 
04. WORKING WITH FUNCTIONS-2 (1).pptx
04. WORKING WITH FUNCTIONS-2 (1).pptx04. WORKING WITH FUNCTIONS-2 (1).pptx
04. WORKING WITH FUNCTIONS-2 (1).pptx
 
Python functions part12
Python functions  part12Python functions  part12
Python functions part12
 
10. funtions and closures IN SWIFT PROGRAMMING
10. funtions and closures IN SWIFT PROGRAMMING10. funtions and closures IN SWIFT PROGRAMMING
10. funtions and closures IN SWIFT PROGRAMMING
 
Functional programming in clojure
Functional programming in clojureFunctional programming in clojure
Functional programming in clojure
 
Functional programming java
Functional programming javaFunctional programming java
Functional programming java
 
functionnotes.pdf
functionnotes.pdffunctionnotes.pdf
functionnotes.pdf
 
functioninpython-1.pptx
functioninpython-1.pptxfunctioninpython-1.pptx
functioninpython-1.pptx
 
Functional programming 101
Functional programming 101Functional programming 101
Functional programming 101
 
functions- best.pdf
functions- best.pdffunctions- best.pdf
functions- best.pdf
 
VIT351 Software Development VI Unit1
VIT351 Software Development VI Unit1VIT351 Software Development VI Unit1
VIT351 Software Development VI Unit1
 

Mais de Knoldus Inc.

Robusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxRobusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxKnoldus Inc.
 
Optimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxOptimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxKnoldus Inc.
 
Azure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxAzure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxKnoldus Inc.
 
CQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxCQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxKnoldus Inc.
 
ETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationKnoldus Inc.
 
Scripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationScripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationKnoldus Inc.
 
Getting started with dotnet core Web APIs
Getting started with dotnet core Web APIsGetting started with dotnet core Web APIs
Getting started with dotnet core Web APIsKnoldus Inc.
 
Introduction To Rust part II Presentation
Introduction To Rust part II PresentationIntroduction To Rust part II Presentation
Introduction To Rust part II PresentationKnoldus Inc.
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Configuring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAConfiguring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAKnoldus Inc.
 
Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)Knoldus Inc.
 
Azure Databricks (For Data Analytics).pptx
Azure Databricks (For Data Analytics).pptxAzure Databricks (For Data Analytics).pptx
Azure Databricks (For Data Analytics).pptxKnoldus Inc.
 
The Power of Dependency Injection with Dagger 2 and Kotlin
The Power of Dependency Injection with Dagger 2 and KotlinThe Power of Dependency Injection with Dagger 2 and Kotlin
The Power of Dependency Injection with Dagger 2 and KotlinKnoldus Inc.
 
Data Engineering with Databricks Presentation
Data Engineering with Databricks PresentationData Engineering with Databricks Presentation
Data Engineering with Databricks PresentationKnoldus Inc.
 
Databricks for MLOps Presentation (AI/ML)
Databricks for MLOps Presentation (AI/ML)Databricks for MLOps Presentation (AI/ML)
Databricks for MLOps Presentation (AI/ML)Knoldus Inc.
 
NoOps - (Automate Ops) Presentation.pptx
NoOps - (Automate Ops) Presentation.pptxNoOps - (Automate Ops) Presentation.pptx
NoOps - (Automate Ops) Presentation.pptxKnoldus Inc.
 
Mastering Distributed Performance Testing
Mastering Distributed Performance TestingMastering Distributed Performance Testing
Mastering Distributed Performance TestingKnoldus Inc.
 
MLops on Vertex AI Presentation (AI/ML).pptx
MLops on Vertex AI Presentation (AI/ML).pptxMLops on Vertex AI Presentation (AI/ML).pptx
MLops on Vertex AI Presentation (AI/ML).pptxKnoldus Inc.
 
Introduction to Ansible Tower Presentation
Introduction to Ansible Tower PresentationIntroduction to Ansible Tower Presentation
Introduction to Ansible Tower PresentationKnoldus Inc.
 
CQRS with dot net services presentation.
CQRS with dot net services presentation.CQRS with dot net services presentation.
CQRS with dot net services presentation.Knoldus Inc.
 

Mais de Knoldus Inc. (20)

Robusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxRobusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptx
 
Optimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxOptimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptx
 
Azure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxAzure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptx
 
CQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxCQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptx
 
ETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake Presentation
 
Scripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationScripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics Presentation
 
Getting started with dotnet core Web APIs
Getting started with dotnet core Web APIsGetting started with dotnet core Web APIs
Getting started with dotnet core Web APIs
 
Introduction To Rust part II Presentation
Introduction To Rust part II PresentationIntroduction To Rust part II Presentation
Introduction To Rust part II Presentation
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Configuring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAConfiguring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRA
 
Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)
 
Azure Databricks (For Data Analytics).pptx
Azure Databricks (For Data Analytics).pptxAzure Databricks (For Data Analytics).pptx
Azure Databricks (For Data Analytics).pptx
 
The Power of Dependency Injection with Dagger 2 and Kotlin
The Power of Dependency Injection with Dagger 2 and KotlinThe Power of Dependency Injection with Dagger 2 and Kotlin
The Power of Dependency Injection with Dagger 2 and Kotlin
 
Data Engineering with Databricks Presentation
Data Engineering with Databricks PresentationData Engineering with Databricks Presentation
Data Engineering with Databricks Presentation
 
Databricks for MLOps Presentation (AI/ML)
Databricks for MLOps Presentation (AI/ML)Databricks for MLOps Presentation (AI/ML)
Databricks for MLOps Presentation (AI/ML)
 
NoOps - (Automate Ops) Presentation.pptx
NoOps - (Automate Ops) Presentation.pptxNoOps - (Automate Ops) Presentation.pptx
NoOps - (Automate Ops) Presentation.pptx
 
Mastering Distributed Performance Testing
Mastering Distributed Performance TestingMastering Distributed Performance Testing
Mastering Distributed Performance Testing
 
MLops on Vertex AI Presentation (AI/ML).pptx
MLops on Vertex AI Presentation (AI/ML).pptxMLops on Vertex AI Presentation (AI/ML).pptx
MLops on Vertex AI Presentation (AI/ML).pptx
 
Introduction to Ansible Tower Presentation
Introduction to Ansible Tower PresentationIntroduction to Ansible Tower Presentation
Introduction to Ansible Tower Presentation
 
CQRS with dot net services presentation.
CQRS with dot net services presentation.CQRS with dot net services presentation.
CQRS with dot net services presentation.
 

Functions In Scala: Local, First Class, Partially Applied & Tail Recursive

  • 1.    Functions In Scala    Janmejani                                      Software Consultant          Knoldus Software LLP
  • 2. AGENDA ● What is Functions. ● Local Functions. ● First Class Function ● Placeholders ● Partially Applied Functions ● Closures ● Repeated Parameters ● Tail Recursion
  • 3. What is Function ➢ A function is a group of statements that together perform a task. ➢ When program gets larger, you need some way to divide them into smaller more manageable pieces. ➢ How you divide is up to you, but logically each function perform a specific task.
  • 4. Difference Between Functions And Methods Functions Methods ➢ Functions have independent ➢ Methods do not have existence means they can be independent existence defined outside of the class. they are always defined with in class. ➢ Methods are called using ➢ Functions are called instance or object. independently.
  • 5. Functions Declaration And Definition def functionName ([list of parameters]) : [return type] def functionName ([list of parameters]) : [return type] = { function body return [expr] } def addInt( a:Int, b:Int ) = { var sum = 0 sum = a + b sum }
  • 6. Calling Functions Following is the standard way to call a method: object Test { def main(args: Array[String]) { println( "Returned Value : " + addInt(5,7) ) } def addInt( a:Int, b:Int ) : a+b }
  • 7. Local Functions Scala allows you to define functions inside a function are called local functions. def factorial(i: Int): Int = { def fact(i: Int, factor: Int): Int = { if (i <= 1) factor else fact(i - 1, i * factor) } fact(i, 1) } }
  • 8. First Class Functions Scala supports first-class functions,which means you can express functions in function literal syntax, ie. , (x: Int) => x + 1, A function literal is compiled into a class that when instantiated at run- time is a function value. For eg : var increase = (x: Int) => x + 1 increase(10)
  • 9. Functions Applied On Functions foreach: It takes a function as an argument and invokes that function on each of its elements. For eg: val someNumbers = List(-11, -10, -5, 0, 5, 10) SomeNumbers foreach((x: Int) => println(x))
  • 10. Filters: Scala provides a number of ways to leave out redundant information. This method selects those elements of a collection that pass a test the user supplies. For eg: someNumbers.filter(x => x > 0) someNumbers.filter(_> 0) To make a function literal even more concise, you can use underscores as placeholders for one or more parameters, so long as each parameter appears only one time within the function literal.
  • 11. Partially Applied Functions Replace the entire list of parameter. For example, rather than writing println(_), you could write println _. val someNumbers = List(-11, -10, -5, 0, 5, 10) someNumbers.foreach(println _) A partially applied function is an expression in which you don’t supply all of the arguments needed by the function. Instead, you supply some, or none, of the needed arguments.
  • 12. Closures A closure is a function whose return value depends on the value of one or more variables declared outside this function. For eg: val multiplier = (i:Int) => i * 10 ➢ A statement with no free variable is called close term. val multiplier = (i:Int) => i * factor ➢ A statement with free variable is called open term. factor is a free variable i is a bound variable The function value (the object) that’s created at runtime from this function literal is called a closure.
  • 13. REPEATED PARAMETERS Scala allows you to indicate that the last parameter to a function may be Repeated. This allows clients to pass variable length argument lists to the Function. For eg: def Size(is: Int*) = is.length println(Size(2,3,4,5,6,67)) To denote a repeated parameter, place an asterisk after the type of the parameter.
  • 14. Tail Recursion In order for a recursive call to be tail recursive, the call back to the function must be the last action performed in the function. def factorial(number:Int) : Int = { if (number == 1) return 1 number * factorial (number - 1) } println(factorial(5)) This is not a tail recursive Function, because the total returned from the recursive call is being multiplied by number, the recursive call is NOT the last action performed in the function.
  • 15. To take this example and make it tail recursive, we must make sure that last action performed in the function is the recursive call. def factorial(fact: Int, number: Int) : Int = { if(number == 1) return fact factorial(number * fact, number - 1) } print(factorial(1,5))
  • 16. Why Tail Recursion? In the recursion example, notice how the result of each call must be remembered, to do this each recursive call requires an entry on the stack until all recursive calls have been made. This makes the recursive call more expensive in terms of memory. While in the tail recursive example, there are no intermediate values that need to be stored on the stack, the intermediate value is always passed back as a parameter.