File tree Expand file tree Collapse file tree 4 files changed +88
-0
lines changed
Expand file tree Collapse file tree 4 files changed +88
-0
lines changed Original file line number Diff line number Diff line change 1+ package Recursion
2+
3+ // 迭代实现阶乘
4+ type Fac struct {
5+ val map [int ]int
6+ }
7+
8+ func NewFactorial (n int ) * Fac {
9+ return & Fac {
10+ make (map [int ]int , n ),
11+ }
12+ }
13+
14+ func (fac * Fac ) Factorial (n int ) int {
15+ if fac .val [n ] != 0 {
16+ return fac .val [n ]
17+ }
18+
19+ if n <= 1 {
20+ fac .val [n ] = 1
21+ return 1
22+ }else {
23+ res := n * fac .Factorial (n - 1 )
24+ fac .val [n ] = res
25+ return res
26+ }
27+ }
28+
29+ func (fac * Fac ) Print (n int ) {
30+ println (fac .val [n ])
31+ }
Original file line number Diff line number Diff line change 1+ package Recursion
2+
3+ import "testing"
4+
5+ func TestFac_Factorial (t * testing.T ) {
6+ fac := NewFactorial (10 )
7+ for i := 1 ; i < 15 ; i ++ {
8+ fac .Factorial (i )
9+ fac .Print (i )
10+ }
11+ }
Original file line number Diff line number Diff line change 1+ package Recursion
2+
3+ import "fmt"
4+
5+ // 递归实现斐波那契数列
6+ type Fibs struct {
7+ val map [int ]int // 使用字典存储结果
8+ }
9+
10+ func NewFibs (n int ) * Fibs {
11+ return & Fibs {
12+ make (map [int ]int , n ),
13+ }
14+ }
15+
16+ func (fib * Fibs )Fibonacci (n int ) int {
17+ if fib .val [n ] != 0 {
18+ return fib .val [n ]
19+ }
20+ if n <= 1 {
21+ fib .val [1 ] = 1
22+ return 1
23+ }else if n == 2 {
24+ fib .val [2 ] = 1
25+ return 1
26+ } else {
27+ res := fib .Fibonacci (n - 1 ) + fib .Fibonacci (n - 2 )
28+ fib .val [n ] = res
29+ return res
30+ }
31+ }
32+
33+ func (fib * Fibs )Print (n int ) {
34+ fmt .Println (fib .val [n ])
35+ }
Original file line number Diff line number Diff line change 1+ package Recursion
2+
3+ import "testing"
4+
5+ func TestFibs_Fibonacci (t * testing.T ) {
6+ fib := NewFibs (10 )
7+ for i := 1 ; i < 15 ; i ++ {
8+ fib .Fibonacci (i )
9+ fib .Print (i )
10+ }
11+ }
You can’t perform that action at this time.
0 commit comments