I've been learning Rust for a few weeks now, and have been trying my hand at the fizzbuzz problem.

Code:
fn fizzbuzz<'a>(n: usize) -> &'a str {
	match (n % 3, n % 5) {
		(0, 0) => fizzbuzz,
		(0, _) => fizz,
		(_, 0) => buzz,
		_ => n.to_string().as_str(),
	}
}

For some reason, I get a compiler error that I'm struggling to understand.

Error:
error[E0515]: cannot return value referencing temporary value
  --> src\main.rs:36:2
   |
36 | /     match (n % 3, n % 5) {
37 | |         (0, 0) => fizzbuzz,
38 | |         (0, _) => fizz,
39 | |         (_, 0) => buzz,
40 | |         _ => n.to_string().as_str(),
   | |              ------------- temporary value created here
41 | |     }
   | |_____^ returns a value referencing data owned by the current function

For more information about this error, try `rustc --explain E0515`.

Could you please explain to my why this happens and how I can fix it?
The simplest way to solve this is to just return a `String` rather than a `& str`:

```rust
fn fizzbuzz(n: usize) -> String {
	match (n % 3, n % 5) {
		(0, 0) => fizzbuzz.to_string(),
		(0, _) => fizz.to_string(),
		(_, 0) => buzz.to_string(),
		_ => n.to_string(),
	}
}
```
I want specific reasons for this error to happen and why is you solution would fix this problem. Explain more thoroughly.