目录
一、简单算法
一、简单算法
1. 阶乘
func factorial(n uint64) (result uint64){
if(n > 0){
result = n * factorial(n-1)
return result
}
return 1
}
2. 斐波那契数
func fibonacci(n int) int{
if(n < 2){
return n
}
return fibonacci(n-1) + fibonacci(n-2)
}
3. 素数
3.1 常规解法
func main(){
var i,j int
for i=2;i<100;i++{
// golang注意事项 此处是i/j 已舍去小数点
for j=2;j<=(i/j);j++{
if i%j == 0{
break
}
}
if j>(i/j){
fmt.Println("素数为:", i)
}
}
}
3.2 筛子解法
func Generate(ch chan<- int){
for i:=2;;i++{
ch<- i
}
}
func Filter(in <-chan int, out chan<- int, prime int){
//递归去除整数倍
for{
i := <-in
if i % prime != 0{
out<- i
}
}
}
func main(){
ch := make(chan int)
go Generate(ch)
for i:=0;i<100;i++{
prime := <-ch
fmt.Println("素数为:", prime)
ch1 := make(chan int)
go Filter(ch, ch1, prime)
// 筛完的管道基础上去筛另一个数的整数倍,比如第一次筛完了2的整数倍赋值给新的管道,新的管道再去筛3的整数倍...
ch = ch1
}
}