题目一:求n!
分析:本题递归求解
1!=1
2!=2*1=2*1!
3!=3*2*1=3*2!
4!=4*3*2*1=4*3!
5!=5*4*3*2**1=5*4!
...
n!=n*(n-1)*(n-2)*(n-3)*...*2*1=n(n-1)!
代码实现:
package main
import "fmt"
func jiecheng(n uint) uint {
if n <= 2 {
return n
}
return n * jiecheng(n-1)
}
func main() {
ret := jiecheng(7)
fmt.Println(ret)
}
题目二:斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
分析后发现规律:
F(0)=0,
F(1)=1,
...
F(n)=F(n - 1)+F(n - 2)
本题可以用递归或者动态规划来解答
代码实现:
递归:
package main
import "fmt"
//递归
func Fib(n uint) uint {
if n <= 1 {
return n
}
return Fib(n-1) + Fib(n-2)
}
func main() {
ret := Fib(4)
fmt.Println(ret)
}
动态规划:
package main
import "fmt"
//动态规划
func taijie(n int) int {
if n <= 2 {
return n
}
a := 1
b := 2
temp := 0
for i := 3; i < n+1; i++ {
temp = a + b
a = b
b = temp
}
return temp
}
func main() {
ret := taijie(20)
fmt.Println(ret)
}