Golang习题


目录

一、简单算法

一、简单算法

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
	}
}
原文地址:https://www.cnblogs.com/zhangliang91/p/11461961.html