Skip to content

Commit 6fd0621

Browse files
committed
adding recursion examples
1 parent 62dbac0 commit 6fd0621

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

main.go

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/symonk/learning-golang/ifelse"
1515
"github.com/symonk/learning-golang/maps"
1616
"github.com/symonk/learning-golang/ranges"
17+
"github.com/symonk/learning-golang/recursion"
1718
"github.com/symonk/learning-golang/slices"
1819
"github.com/symonk/learning-golang/switches"
1920
"github.com/symonk/learning-golang/tickers"
@@ -42,6 +43,7 @@ var (
4243
functions.Run,
4344
variables.Run,
4445
closures.Run,
46+
recursion.Run,
4547
}
4648
)
4749

recursion/main.go

+26
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
package recursion
22

3+
import "fmt"
4+
5+
/* Go supports `recursive function`, a function that internally calls itself.*/
36
func Run() {
7+
fmt.Println(factorial(3)) // 6
8+
fibonacci := recursiveClosureFibonacci()
9+
fmt.Println(fibonacci(10)) // 55
10+
}
11+
12+
func factorial(n int) int {
13+
// Define the exit criteria to avoid infinite recursion.
14+
if n == 1 {
15+
return n
16+
}
17+
return n * factorial(n-1)
18+
}
19+
20+
func recursiveClosureFibonacci() func(int) int {
21+
// Closures can also be recursive
422

23+
var fib func(n int) int
24+
fib = func(n int) int {
25+
if n < 2 {
26+
return n
27+
}
28+
return fib(n-1) + fib(n-2)
29+
}
30+
return fib
531
}

0 commit comments

Comments
 (0)