Chapter3 - 재귀

재귀함수

  • 기본 단계 : 함수가 자기 자신을 다시 호출하지 않는 경우(무한 루프에 빠지지 않게 하는 부분)

  • 재귀 단계 : 함수가 자기 자신을 호출하는 부분.

  • 재귀 함수가 무한히 실행되면 스택 오버플로우가 발생.

func countdown(_ i:Int) {
  print(i)
  if i <= 1 { 
    return  // 기본단계
  } else {
    countdown(i-1) // 재귀단계
  }
}

스택

  • 푸시와 팝이라는 두가지 연산이 존재.

호출 스택

  • 여러 개의 함수를 호출하면서 함수에 사용되는 변수를 저장하는 스택

  • 모든 함수 호출은 호출 스택을 사용.

  • 호출 스택이 너무 커져서 메모리를 많이 사용하게 될 수 있음.

* 스택이 너무 커지면 많은 메모리를 사용하게 된다. 이를 해결하기 위해 재귀 대신 반복문을 사용하거나 꼬리 재귀를 사용한다.

func greet(_ name:String) {
  print("hello, \(name)!")
  greet2(name)
  print("getting ready to say bye...")
  bye()
}
func greet2(_ name:String) {
  print("how are you, \(name)?")
}
func bye() {
  print("ok bye!")
}

재귀 함수에서 호출 스택 사용 펙토리얼 코드

func fact(_ x:Int) {
  if x==1 {
    return 1
  } else {
    return x*fact(x-1)
  }
}
comments powered by Disqus