kopia lustrzana https://github.com/animator/learn-python
Updated recursion.md with example to explain the working of recursion with simple python program
This commit updates the recursion explanation in the recursion.md file to be more beginner-friendly and comprehensive. The factorial example has been revised with n = 4 and stack variables have been included for each recursive call to demonstrate how functions are called and how values are returned. These changes aim to provide a clearer understanding of recursion, especially for beginners, by illustrating the step-by-step process of function calls and return values.pull/599/head
rodzic
368955a27e
commit
d0e9b353f7
|
@ -17,6 +17,49 @@ When a recursive function is called, the following sequence of events occurs:
|
||||||
- Stack Management: Each recursive call is placed on the call stack. The stack keeps track of each function call, its argument, and the point to return to once the call completes.
|
- Stack Management: Each recursive call is placed on the call stack. The stack keeps track of each function call, its argument, and the point to return to once the call completes.
|
||||||
- Unwinding the Stack: When the base case is eventually met, the function returns a value, and the stack starts unwinding, returning values to previous function calls until the initial call is resolved.
|
- Unwinding the Stack: When the base case is eventually met, the function returns a value, and the stack starts unwinding, returning values to previous function calls until the initial call is resolved.
|
||||||
|
|
||||||
|
# Python Code: Factorial using Recursion
|
||||||
|
|
||||||
|
```python
|
||||||
|
def fact(n):
|
||||||
|
if n == 0 or n == 1:
|
||||||
|
return 1
|
||||||
|
return n * fact(n - 1)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
n = int(input("Enter a positive number: "))
|
||||||
|
print("Factorial of", n, "is", fact(n))
|
||||||
|
```
|
||||||
|
|
||||||
|
## Explanation
|
||||||
|
|
||||||
|
This Python script calculates the factorial of a given number using recursion.
|
||||||
|
|
||||||
|
- **Function `fact(n)`:**
|
||||||
|
- The function takes an integer `n` as input and calculates its factorial.
|
||||||
|
- It checks if `n` is 0 or 1. If so, it returns 1 (since the factorial of 0 and 1 is 1).
|
||||||
|
- Otherwise, it returns `n * fact(n - 1)`, which means it recursively calls itself with `n - 1` until it reaches either 0 or 1.
|
||||||
|
|
||||||
|
- **Main Section:**
|
||||||
|
- The main section prompts the user to enter a positive number.
|
||||||
|
- It then calls the `fact` function with the input number and prints the result.
|
||||||
|
|
||||||
|
### Example : Let n = 4
|
||||||
|
|
||||||
|
|
||||||
|
The recursion unfolds as follows:
|
||||||
|
1. When `fact(4)` is called, it computes `4 * fact(3)`.
|
||||||
|
2. Inside `fact(3)`, it computes `3 * fact(2)`.
|
||||||
|
3. Inside `fact(2)`, it computes `2 * fact(1)`.
|
||||||
|
4. `fact(1)` returns 1 (`if` statement executes), which is received by `fact(2)`, resulting in `2 * 1` i.e. `2`.
|
||||||
|
5. Back to `fact(3)`, it receives the value from `fact(2)`, giving `3 * 2` i.e. `6`.
|
||||||
|
6. `fact(4)` receives the value from `fact(3)`, resulting in `4 * 6` i.e. `24`.
|
||||||
|
7. Finally, `fact(4)` returns 24 to the main function.
|
||||||
|
|
||||||
|
|
||||||
|
#### So, the result is 24.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# What is Stack Overflow in Recursion
|
# What is Stack Overflow in Recursion
|
||||||
|
|
||||||
Stack overflow is an error that occurs when the call stack memory limit is exceeded. During execution of recursion calls they are simultaneously stored in a recursion stack waiting for the recursive function to be completed. Without a base case, the function would call itself indefinitely, leading to a stack overflow.
|
Stack overflow is an error that occurs when the call stack memory limit is exceeded. During execution of recursion calls they are simultaneously stored in a recursion stack waiting for the recursive function to be completed. Without a base case, the function would call itself indefinitely, leading to a stack overflow.
|
||||||
|
|
Ładowanie…
Reference in New Issue