채널을 통해 통신하는 n goroutines를 사용하여 golang에서 fibonacci 재귀를 구현하려고합니다.n goroutines와 통신
함수에서 정수를 반환하지만 실제로 f (n-1) + f (n-2)의 합계를 채널 C로 보냈지 만 올바르게 작동하지 않습니다. 이것은 올바른 처음 두 값을 출력하고, 각 값은 이후 단지 1.
package main
import "fmt"
// Fibonacci in a recursive version
func fiboR(n int, c chan int) int {
if(n == 0){
c <- 0
return 0
} else if n == 1 {
c <- 1
return 1
} else{
c <- fiboR(n-1,c) + fiboR(n-2,c)
return fiboR(n-1,c) + fiboR(n-2,c)
}
}
func main() {
for i := 0; i < 10; i++ {
procchan := make(chan int)
go fiboR(i,procchan)
fmt.Println(i,<-procchan)
}
}
또한 두 재귀 호출을 수신하기위한 채널을 사용하는 것이 가능하다?
'<-procchan'에 접근하고 있다면 값이 있고 계속 진행될 때까지 채널을 기다리는 중입니까? 그런 식으로 for 루프는 순차 실행과 동일하지 않습니까? –
예 순차와 동일합니다. tou는 하나의 goroutine을 시작하고 첫 번째 결과를 기다리고 그 결과를 출력 한 다음 다른 결과를 시작합니다. 문제는 goroutines가 각 재귀의 채널에서 값을 반환한다는 것입니다. 따라서 f (2) 호출이 채널에 값을 넣기 전에 f (2)를 호출 할 때 차례대로 모든 f (1) 및 f (0) 채널에 값을 넣습니다 그 전에 채널에 값을 입력하십시오. 그리고 당신이 문제를 일으키는 첫 번째 가치만을 붙잡고 있기 때문에. – nissefors
@ NanduKalidindi 미안하지만, 분명히 사용자 이름을 확인하지 못했고, 당신이 3hdeye7 – nissefors