Tail recursive function high order function
This presentation is the property of its rightful owner.
Sponsored Links
1 / 19

Tail-recursive Function, High-order Function PowerPoint PPT Presentation


  • 287 Views
  • Uploaded on
  • Presentation posted in: General

Tail-recursive Function, High-order Function. 전자계산입문 2009/04/03. Tail-recursive Function. [ 문제 1] factorial 을 계산하는 함수 fact 를 recursive function 으로 작성한다 . [ 실행결과 ]. Tail-recursive Function. [ 모범답안 ]. let rec fact n = if n = 0 then 1 else n * fact (n - 1) ;;.

Download Presentation

Tail-recursive Function, High-order Function

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Tail recursive function high order function

Tail-recursive Function,High-order Function

전자계산입문

2009/04/03


Tail recursive function

Tail-recursive Function

  • [문제1] factorial 을 계산하는 함수 fact를 recursive function으로 작성한다.

  • [실행결과]


Tail recursive function1

Tail-recursive Function

  • [모범답안]

let rec fact n =

if n = 0 then 1

else n * fact (n - 1)

;;


Tail recursive function2

Tail-recursive Function

  • [실습] factorial 을 계산하는 함수 fact 를 tail-recursive function으로 작성한다.

  • [모범답안]

let fact n =

let rec fact' n accum =

if n = 0 then accum

else fact' (n - 1) (n * accum)

in

fact' n 1

;;


Tail recursive function3

Tail-recursive Function

  • [문제2] exponentiation 을 계산하는 함수 pow 를 recursive function으로 작성한다.

    (인자 a와 b를 받아 ab를 계산하는 함수 pow 작성)

  • [실행결과]

Pow 3 20(=320)과 같이 pow 함수를 적용하는 경우 Ocaml이 표현 할 수 있는 정수의 범위를 벗어나 overflow 가 발생한다.


Tail recursive function4

Tail-recursive Function

  • [모범답안]

let recpow a b =

if b = 0 then 1

else a * pow a (b - 1)

;;


Tail recursive function5

Tail-recursive Function

  • [실습] exponentiation 을 계산하는 함수 pow 를 tail-recursive function 으로 작성한다.

  • [모범답안]

let pow a b =

let recpow' a b s =

if b = 0

then s

else pow' a (b-1) (s*a)

in

pow' a b 1

;;


Tail recursive function6

Tail-recursive Function

  • [문제3] 2진수를 10진수로 바꾸는 함수bin2dec을 recursive function으로 작성한다.

  • [실행결과]


Tail recursive function7

Tail-recursive Function

  • [모범답안]

let rec bin2dec x =

if x = 0 then 0

else if x = 1 then 1

else 2 * bin2dec (x/10) + x mod 10

;;


Tail recursive function8

Tail-recursive Function

  • [실습] 2진수를 10진수로 바꾸는 함수bin2dec을 tail-recursive function으로 작성한다.

  • [실행결과]


Tail recursive function9

Tail-recursive Function

  • [오답] 착각하기 쉬운 답(하지만 반대로 계산 됨 -.-)

let bin2dec n =

let rec bin2dec' n accum =

if n = 0 then accum

else bin2dec' (n / 10) (accum * 2 + n mod 10)

in

bin2dec' n 0

;;


Tail recursive function10

Tail-recursive Function

  • [모범답안] 또 하나의 변수를 이용해야 함

let bin2dec n =

let rec bin2dec' n m accum =

if n = 0 then accum

else bin2dec' (n / 10) (m * 2) (accum + m * (n mod 10))

in

bin2dec' n 1 0

;;


High order function

High-order Function

  • 정수 x 와 y 의 합

let sum x y = x + y;;

1. sum 은 무엇인가?

- sum 은 함수이다. type은 int -> int -> int

2. sum 2 3 은 무엇인가?

- integer 이며, 그 값은 5 이다

3. sum 2 는 무엇인가?

오류인가?

# sum 2;;

- : int -> int = <fun>

- 오류가 아니다. sum 2는 함수이다.


High order function1

High-order Function

  • 정수 x 와 y 의 합

4. 테스트

# f 10;;

- : int = 12

# f 15;;

- : int = 17

# f 99;;

- : int = 101

즉, sum 2는 2를 더하는 함수라 할 수 있다.


High order function2

High-order Function

  • 함수의 argument를 전부 주지 않는 경우

let sum x y = x + y;;

let add2 = sum 2;;

add2 5;;

나머지 argument 를 받아 계산하는 함수가 됨

(아래와 완전히 동일한 의미)

let add2 x = 2 + x;;


High order function3

High-order Function

  • [실습] string_adders는 어떤 문자열 앞에 s를 삽입하여 반환하는 함수 작성

  • [실행결과]

# string_adder;;

- : string -> string -> string = <fun>

# let hello_adder = string_adder "Hello ";;

valhello_adder : string -> string = <fun>

# hello_adder "della";;

- : string = "Hello della"

# let bye_adder = string_adder "Bye ";;

valbye_adder : string -> string = <fun>

# bye_adder "della";;

- : string = "Bye della"


High order function4

High-order Function

  • [모범답안]두 가지 방법

let string_adder s = fun x -> s ^ x;;

let string_adder s =

let

h s x = s ^ x

in

h s

;;


High order function5

High-order Function

  • [실습] integral f a b 는 int -> int 타입을 가지는 함수 f 를 구간 [a,b]에서 구분구적한 값을 반환하는 함수 작성. 구분구적에 사용하는 수식

  • [실행결과]

# integral;;

- : (int -> int) -> int -> int -> int = <fun>

# let f x = 3*x*x + x - 9;;

val f : int -> int = <fun>

# integral f 0 0;;

- : int = 0

# integral f 0 10;;

- : int = 810


High order function6

High-order Function

  • [모범답안]

let integral f a b =

let rec integral' f a b s =

if a = b

then s

else integral' f (a+1) b (f a + s)

in

integral' f a b 0

;;


  • Login