# Thread has overflowed its stack

**URL:** <https://users.rust-lang.org/t/thread-has-overflowed-its-stack/140218>\
**Category:** help\
**Created:** [May 22, 2026, 8:46am UTC](https://users.rust-lang.org/t/thread-has-overflowed-its-stack/140218 "2026-05-22T08:46:03Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![raiko](https://avatars.discourse-cdn.com/v4/letter/r/3da27b/32.png) [@raiko](https://users.rust-lang.org/u/raiko)\
**Post date:** [May 22, 2026, 8:46am UTC](https://users.rust-lang.org/t/thread-has-overflowed-its-stack/140218/1 "2026-05-22T08:46:03Z")

</div>

Hello there! I'm new to Rust and now started to solve "100 exercise to learn Rust"([GitHub - mainmatter/100-exercises-to-learn-rust: A self-paced course to learn Rust, one exercise at a time. · GitHub](https://github.com/mainmatter/100-exercises-to-learn-rust))

So there is the code:

```rust

fn factorial(n: u32) -> u32 {
    if n < 2 {
        1
    } else {
        n * factorial(n) - 1
    }
}

#[cfg(test)]
mod tests {
    use crate::factorial;
    
    #[test]
    fn first() {
        assert_eq!(factorial(0), 1);
    }
    
    #[test]
    fn second() {
        assert_eq!(factorial(1), 1);
    }
    
    #[test]
    fn third() {
        assert_eq!(factorial(2), 2);
    }
    
    #[test]
    fn fifth() {
        assert_eq!(factorial(5), 120);
    }
}

```

When I try to run ''cargo test" I have this message:

```rust
running 4 tests
test tests::first ... ok

thread 'tests::second' (308539) has overflowed its stack
fatal runtime error: stack overflow, aborting
error: test failed, to rerun pass `--lib`

Caused by:
  process didn't exit successfully: `/home/.../Rust/100exercises/2/factorial/target/debug/deps/factorial-23c7f241ea6c1944` (signal: 6, SIGABRT: process abort signal)

```

Does anybody know why is it don't exit successfully?

---

<div class="post-metadata">

**Author:** ![ProgramCrafter](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/programcrafter/32/45916_2.png) [@ProgramCrafter](https://users.rust-lang.org/u/ProgramCrafter)\
**Post date:** [May 22, 2026, 8:55am UTC](https://users.rust-lang.org/t/thread-has-overflowed-its-stack/140218/2 "2026-05-22T08:55:13Z")

</div>

Because from `factorial(n)` you invoke `factorial(n)` once again.

---

<div class="post-metadata">

**Author:** ![mfreeborn](https://avatars.discourse-cdn.com/v4/letter/m/e495f1/32.png) [@mfreeborn](https://users.rust-lang.org/u/mfreeborn)\
**Post date:** [May 22, 2026, 9:10am UTC](https://users.rust-lang.org/t/thread-has-overflowed-its-stack/140218/3 "2026-05-22T09:10:01Z")

</div>

Should your `- 1` be inside the parenthesis when you are recursing?

(Edit: sorry, meant to quote OP)

---

<div class="post-metadata">

**Author:** ![raiko](https://avatars.discourse-cdn.com/v4/letter/r/3da27b/32.png) [@raiko](https://users.rust-lang.org/u/raiko)\
**Post date:** [May 22, 2026, 9:10am UTC](https://users.rust-lang.org/t/thread-has-overflowed-its-stack/140218/4 "2026-05-22T09:10:14Z")

</div>

Ohh I saw it now 🤦‍♂️  
it must be factorial(n-1)

---

<div class="post-metadata">

**Author:** ![raiko](https://avatars.discourse-cdn.com/v4/letter/r/3da27b/32.png) [@raiko](https://users.rust-lang.org/u/raiko)\
**Post date:** [May 22, 2026, 9:11am UTC](https://users.rust-lang.org/t/thread-has-overflowed-its-stack/140218/5 "2026-05-22T09:11:06Z")

</div>

Yes exactly. Maybe I'm just tired. Thanks mate!

---

<div class="post-metadata">

**Author:** ![fuji-184](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/fuji-184/32/46153_2.png) [@fuji-184](https://users.rust-lang.org/u/fuji-184)\
**Post date:** [May 22, 2026, 10:15am UTC](https://users.rust-lang.org/t/thread-has-overflowed-its-stack/140218/6 "2026-05-22T10:15:51Z")

</div>

You exhausted the stack memory size limit (stack overflow). Because the function keep calling itself in very many loopings, until it uses all the stack memory size

In linux you can check the stack size limit with

```bash
ulimit -s

```

Usually it is 8 MB

You can increase the stack size manually

But better to change the recursive algorithm to better algorithm

---

<div class="post-metadata">

**Author:** ![system](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/system/32/51372_2.png) [@system](https://users.rust-lang.org/u/system)\
**Post date:** [August 20, 2026, 10:16am UTC](https://users.rust-lang.org/t/thread-has-overflowed-its-stack/140218/7 "2026-08-20T10:16:03Z")

</div>

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.
