帮我画出上述问题的堆栈变化示意图。
时间: 2023-09-12 22:06:38 浏览: 51
当调用factorial(5)时,堆栈变化如下所示:
```
| Stack | Return Value |
|-----------------------|
| factorial(5) | - |
|-----------------------|
| factorial(4) | - |
|-----------------------|
| factorial(3) | - |
|-----------------------|
| factorial(2) | - |
|-----------------------|
| factorial(1) | 1 |
|-----------------------|
```
当factorial(1)返回后,堆栈变化如下所示:
```
| Stack | Return Value |
|-----------------------|
| factorial(2) | 2 |
|-----------------------|
| factorial(3) | 6 |
|-----------------------|
| factorial(4) | 24 |
|-----------------------|
| factorial(5) | 120 |
|-----------------------|
```
从上述堆栈变化示意图可以看出,每次函数调用都会在堆栈中压入一个新的栈帧,直到递归调用结束后,函数才开始返回,并在堆栈中弹出栈帧。最后得到的结果从最底层的栈帧开始向上传递,直到最上层的栈帧被返回。