후퇴를 없애다

2214 단어 算法设计golang

귀속


함수 호출 자체를 귀속이라고 한다.만약 꼬리가 자신을 호출한다면 꼬리 귀속이라고 부른다.
수천 수백 개의 호출 프레임을 동시에 저장해야 하기 때문에 창고 넘침 오류 (stack overflow) 가 발생하기 쉽습니다.그러나 꼬리 귀속에 있어서, 호출 프레임이 하나만 존재하기 때문에, 영원히'창고 넘침'오류가 발생하지 않습니다.

대비

package main

import (
    "fmt"
)

//  
func fibonacci(n int) int {
    if n <= 1 {
        return 1
    }else {
        return fibonacci(n - 1) + fibonacci(n - 2)
    }
}


//  
func fibonacci2(n int, args [2]int) int {
    if n <= 1 {
        return args[1]
    }else {
        args[0], args[1] = args[1], args[0] + args[1]
        return fibonacci2(n-1, args)
    }
}


func main() {
    //  
    //fmt.Println(fibonacci(1000))

    //  
    args := [2]int{1, 1,}
    fmt.Println(fibonacci2(1000, args)) 
}

좋은 웹페이지 즐겨찾기