# How to avoid Stack overflow

**URL:** <https://discourse.julialang.org/t/how-to-avoid-stack-overflow/24681>\
**Category:** New to Julia\
**Created:** [May 28, 2019, 7:55am UTC](https://discourse.julialang.org/t/how-to-avoid-stack-overflow/24681 "2019-05-28T07:55:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![StevenSiew](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevensiew/32/218393_2.png) [@StevenSiew](https://discourse.julialang.org/u/StevenSiew)\
**Post date:** [May 28, 2019, 7:55am UTC](https://discourse.julialang.org/t/how-to-avoid-stack-overflow/24681/1 "2019-05-28T07:55:08Z")

</div>

I have a program below which calculates Pi using Zeta(2) function, but it stack overflows when the limit is 260000

```julia
const limit=260000

@inline function formula(n::Int64)
    return 1.0/(Float64(n)*Float64(n))
end

function zetatwo(k::Int64)
    if k<limit
        return formula(k)+zetatwo(k+1)
    else
        return formula(k)
    end
end

println("Pi is ",sqrt(6.0*zetatwo(1)))

```

The output is

```julia
ERROR: LoadError: StackOverflowError:
Stacktrace:
 [1] zetatwo(::Int64) at /Users/ssiew/juliascript/zeta_two_Float64.jl:10 (repeats 99 times)
in expression starting at /Users/ssiew/juliascript/zeta_two_Float64.jl:16

```

It works when limit is 250000

```julia
const limit=250000

@inline function formula(n::Int64)
    return 1.0/(Float64(n)*Float64(n))
end

function zetatwo(k::Int64)
    if k<limit
        return formula(k)+zetatwo(k+1)
    else
        return formula(k)
    end
end

println("Pi is ",sqrt(6.0*zetatwo(1)))

```

The output is

```julia
Pi is 3.1415888338764764

```

How do I increase the stack to prevent the overflow?

---

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [May 28, 2019, 8:11am UTC](https://discourse.julialang.org/t/how-to-avoid-stack-overflow/24681/2 "2019-05-28T08:11:00Z")

</div>

Julia does not have tail call optimisation,  
avoid deep recusion

```julia
@inline function formula(n::Int64)
    return 1.0/(Float64(n)*Float64(n))
end

calc_pi(limit) = sqrt(6.0*sum(formula, 1:limit))
println("Pi is ", calc_pi(1_000_000_000))

```

---

<div class="post-metadata">

**Author:** ![StevenSiew](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevensiew/32/218393_2.png) [@StevenSiew](https://discourse.julialang.org/u/StevenSiew)\
**Post date:** [May 28, 2019, 9:07am UTC](https://discourse.julialang.org/t/how-to-avoid-stack-overflow/24681/3 "2019-05-28T09:07:33Z")

</div>

> [@oxinabox](#):
>
> @inline function formula(n::Int64) return 1.0/(Float64(n)_Float64(n)) end calc\_pi(limit) = sqrt(6.0_sum(formula, 1:limit)) println("Pi is ", calc\_pi(1\_000\_000\_000))

When calculating Zeta(2), you need to calculate the smallest value first.

```julia
@inline function formula(n::Int64)
    return 1.0/(Float64(n)*Float64(n))
end

calc_pi(limit) = sqrt(6.0*sum(formula, limit:-1:1))
println("Pi is ", calc_pi(1_000_000_000))

```
