# Recursion In Go

Recursion is a programming technique where a function calls itself during its execution. In Go, you can implement recursive functions to solve problems that can be broken down into smaller, similar subproblems. Here’s an example to illustrate recursion in Go:

``````package main

import "fmt"

func factorial(n int) int {
if n == 0 {
return 1
}
return n * factorial(n-1)
}

func main() {
result := factorial(5)
fmt.Println("Factorial:", result) // Factorial: 120
}``````

In this example, the `factorial` function is a recursive function that calculates the factorial of a given integer `n`. The factorial of a number is the product of all positive integers less than or equal to that number. In this case, `factorial(5)` calculates `5!` (5 factorial).

The base case in the `factorial` function is when `n` equals 0, in which case it returns 1. Otherwise, it recursively calls itself with the argument `n-1` and multiplies it with `n`. This recursive process continues until the base case is reached.

When the `factorial` function is called with `5` as the argument in the `main` function, it recursively calculates the factorial as `5 * 4 * 3 * 2 * 1`, which results in `120`.

Recursion can be a powerful technique for solving problems that exhibit self-repeating patterns or can be broken down into smaller subproblems. However, it’s important to ensure that a recursive function has a well-defined base case to prevent infinite recursion.

Here’s another example of recursion, demonstrating the calculation of the Fibonacci sequence:

``````package main

import "fmt"

func fibonacci(n int) int {
if n <= 1 {
return n
}
return fibonacci(n-1) + fibonacci(n-2)
}

func main() {
result := fibonacci(6)
fmt.Println("Fibonacci:", result) // Fibonacci: 8
}``````

In this example, the `fibonacci` function calculates the Fibonacci number at position `n`. The Fibonacci sequence starts with 0 and 1, and each subsequent number is the sum of the two preceding numbers. The base case is when `n` is 0 or 1, in which case it returns `n`. Otherwise, it recursively calls itself with `n-1` and `n-2`, adding the results together.

When `fibonacci(6)` is called, it recursively calculates the sixth Fibonacci number, which is `8`.

Recursion can be an elegant and concise way to solve certain problems, but it can also lead to performance and stack overflow issues if not used appropriately. It’s important to carefully design the recursive function and ensure that it terminates correctly.