Sunteți pe pagina 1din 77

ALP Laborator 2

What is recursion?
Google it ! :)
1. Scrie toate cifrele dintr-un numar

printDigit(1234)
1. Scrie toate cifrele dintr-un numar

printDigit(1234)
Apeleaza functia pentru numar / 10

printDigit(123)
1. Scrie toate cifrele dintr-un numar

printDigit(1234)
Apeleaza functia pentru numar / 10

printDigit(123)
Apeleaza functia pentru numar / 10

printDigit(12)
1. Scrie toate cifrele dintr-un numar

printDigit(1234)
Apeleaza functia pentru numar / 10

printDigit(123)
Apeleaza functia pentru numar / 10

printDigit(12)
Apeleaza functia pentru
numar / 10

printDigit(1)
1. Scrie toate cifrele dintr-un numar

printDigit(1234)
Apeleaza functia pentru numar / 10

printDigit(123)
Apeleaza functia pentru numar / 10

printDigit(12)
Apeleaza functia pentru
numar / 10

printDigit(1) Printeaza
numar (1)
1. Scrie toate cifrele dintr-un numar

printDigit(1234)

printDigit(123)

printDigit(12)

Continua cu executia
functiei apelate anterior
(print 12 % 10) printDigit(1) Printeaza
numar
1. Scrie toate cifrele dintr-un numar

printDigit(1234)

printDigit(123)

Continua cu executia
functiei apelate anterior
Print (123 % 10) printDigit(12)

Continua cu executia
functiei apelate anterior
(print 12 % 10) printDigit(1)
1. Scrie toate cifrele dintr-un numar

printDigit(1234)


print(1234
% 10) printDigit(123)

Continua cu executia
functiei apelate anterior
Print (123 % 10) printDigit(12)

Continua cu executia
functiei apelate anterior
(print 12 % 10) printDigit(1)
2. Returneaza factorialul unui numar

factorial(4)
2. Returneaza factorialul unui numar

factorial(4)
Inmulteste n cu factorial(n-1) >> 4 *factorial(3)

factorial(3)
2. Returneaza factorialul unui numar

factorial(4)
Inmulteste n cu factorial(n-1) >> 4 *factorial(3)

Inmulteste n cu factorial(n-1) >> 3 * factorial(2)


factorial(3)

factorial(2)
2. Returneaza factorialul unui numar

factorial(4)
Inmulteste n cu factorial(n-1) >> 4 *factorial(3)

Inmulteste n cu factorial(n-1) >> 3 * factorial(2)


factorial(3)

Inmulteste n cu factorial(n-1)
>> 2 * factorial(1)
factorial(2)

factorial(1)
2. Returneaza factorialul unui numar

factorial(4)
Inmulteste n cu factorial(n-1) >> 4 *factorial(3)

Inmulteste n cu factorial(n-1) >> 3 * factorial(2)


factorial(3)

Inmulteste n cu factorial(n-1)
>> 2 * factorial(1)
factorial(2)

In memorie trebuia
factorial(1) Returneaza
inmultit cu 2 = 2
1
2. Returneaza factorialul unui numar

factorial(4)
Inmulteste n cu factorial(n-1) >> 4 *factorial(3)

Inmulteste n cu factorial(n-1) >> 3 * factorial(2)


factorial(3)

Inmulteste n cu factorial(n-1)
In memorie trebuia >> 2 * factorial(1)
inmultit cu 3 = 6 factorial(2)

In memorie trebuia
factorial(1) Returneaza
inmultit cu 2 = 2
1
2. Returneaza factorialul unui numar

factorial(4)
Inmulteste n cu factorial(n-1) >> 4 *factorial(3)

In memorie
trebuia Inmulteste n (3) cu factorial(n-1) >> factorial(2)
factorial(3)
inmultit cu 4 =
24
Inmulteste n (2) cu factorial(n-1) >>
In memorie trebuia factorial(1)
inmultit cu 3 = 6 factorial(2)

In memorie trebuia
factorial(1) Returneaza
inmultit cu 2 = 2
1
3. Sirul lui Fibonacci

Fibonacci in nature
3. Sirul lui Fibonacci

fibonacci(6)
3. Sirul lui Fibonacci

fibonacci(6) Apeleaza f(n-2) si f(n-1) >> f(4) si f(5)

fibonacci(4) + fibonacci(5)
3. Sirul lui Fibonacci

fibonacci(6) Apeleaza f(n-2) si f(n-1) >> f(4) si f(5)

fibonacci(4) + fibonacci(5)

Apeleaza f(n-2) si f(n-1) >> f(2) si f(3)

fibonacci(2) + fibonacci(3)
3. Sirul lui Fibonacci

fibonacci(6) Apeleaza f(n-2) si f(n-1) >> f(4) si f(5)

fibonacci(4) + fibonacci(5)

Apeleaza f(n-2) si f(n-1) >> f(2) si f(3)

fibonacci(2) + fibonacci(3)

Apeleaza f(n-2) si f(n-1) >> f(0) si f(1)

fibonacci(0) + fibonacci(1)
3. Sirul lui Fibonacci

fibonacci(6) Apeleaza f(n-2) si f(n-1) >> f(4) si f(5)

fibonacci(4) + fibonacci(5)

Apeleaza f(n-2) si f(n-1) >> f(2) si f(3)

fibonacci(2) + fibonacci(3)

Apeleaza f(n-2) si f(n-1) >> f(0) si f(1)

fibonacci(0) + fibonacci(1)
Am aflat fib(2) =
0+1=1
Stim ca trebuie
sa calculam
0 1 fib(3)
3. Sirul lui Fibonacci

fibonacci(6) Apeleaza f(n-2) si f(n-1) >> f(4) si f(5)

fibonacci(4) + fibonacci(5)

Apeleaza f(n-2) si f(n-1) >> f(2) si f(3) Apeleaza f(n-2) si f(n-1) >> f(2) si f(1)

fibonacci(2) + fibonacci(3)
fibonacci(2) + fibonacci(1)

Apeleaza f(n-2) si f(n-1) >> f(0) si f(1)

fibonacci(0) + fibonacci(1)
Am aflat fib(2) =
0+1=1
Stim ca trebuie
sa calculam fib(3)
0 1
3. Sirul lui Fibonacci

fibonacci(6) Apeleaza f(n-2) si f(n-1) >> f(4) si f(5)

fibonacci(4) + fibonacci(5)

Apeleaza f(n-2) si f(n-1) >> f(2) si f(3) Apeleaza f(n-2) si f(n-1) >> f(2) si f(1)

fibonacci(2) + fibonacci(3)
fibonacci(2) + fibonacci(1)

Apeleaza f(n-2) si f(n-1) >> f(0) si f(1) Apeleaza f(n-2) si f(n-1) >> f(0) si f(1)

fibonacci(0) + fibonacci(1)
Am aflat fib(2) = fibonacci(0) + fibonacci(1)
0+1=1
Stim ca trebuie
sa calculam fib(3)
0 1
3. Sirul lui Fibonacci

fibonacci(6) Apeleaza f(n-2) si f(n-1) >> f(4) si f(5)

fibonacci(4) + fibonacci(5)

Apeleaza f(n-2) si f(n-1) >> f(2) si f(3) Apeleaza f(n-2) si f(n-1) >> f(2) si f(1)

fibonacci(2) + fibonacci(3)
fibonacci(2) + fibonacci(1)
Am aflat fib(2) =
0+1=1
Apeleaza f(n-2) si f(n-1) >> f(0) si f(1) Apeleaza f(n-2) si f(n-1) >> f(0) si f(1) Stim ca trebuie
sa calculam fib(1)
fibonacci(0) + fibonacci(1)
Am aflat fib(2) = fibonacci(0) + fibonacci(1)
0+1=1
Stim ca trebuie
sa calculam fib(3)
0 1 0 1
3. Sirul lui Fibonacci

fibonacci(6) Apeleaza f(n-2) si f(n-1) >> f(4) si f(5)


fibonacci(1) = 1 + am calculat ca
fibonacci(4) + fibonacci(5) fibonacci(2) = 1, deci fibonacci(3) = 2

Apeleaza f(n-2) si f(n-1) >> f(2) si f(3) Apeleaza f(n-2) si f(n-1) >> f(2) si f(1)

fibonacci(2) + fibonacci(3)
fibonacci(2) + fibonacci(1)
Am aflat fib(2) =
0+1=1
Apeleaza f(n-2) si f(n-1) >> f(0) si f(1) Apeleaza f(n-2) si f(n-1) >> f(0) si f(1) Stim ca trebuie
sa calculam fib(1)
fibonacci(0) + fibonacci(1)
Am aflat fib(2) = fibonacci(0) + fibonacci(1)
0+1=1
Stim ca trebuie
sa calculam fib(3)
0 1 0 1
3. Sirul lui Fibonacci
Acum stim ca fibonacci(2)
= 1 si fibonacci(3) = 2,
fibonacci(6) Apeleaza f(n-2) si f(n-1) >>
deci f(4) si(4)
fibonacci f(5)
=3

fibonacci(1) = 1 + fibonacci(2) = 1, deci


fibonacci(4) + fibonacci(5) fibonacci(3) = 2

Apeleaza f(n-2) si f(n-1) >> f(2) si f(3) Apeleaza f(n-2) si f(n-1) >> f(2) si f(1)

fibonacci(2) + fibonacci(3)
fibonacci(2) + fibonacci(1)
Am aflat fib(2) =
0+1=1
Apeleaza f(n-2) si f(n-1) >> f(0) si f(1) Apeleaza f(n-2) si f(n-1) >> f(0) si f(1) Stim ca trebuie
sa calculam fib(1)
fibonacci(0) + fibonacci(1)
Am aflat fib(2) = fibonacci(0) + fibonacci(1)
0+1=1
Stim ca trebuie
sa calculam fib(3)
0 1 0 1
fibonacci(6)
Apeleaza f(n-2) si f(n-1) >> f(3) si f(4)
fibonacci(4) + fibonacci(5)

=3 fibonacci(3) fibonacci(4)

Se urmeaza acelasi proces pentru


ramura fibonacci(5)

De mai devreme stim ca vom ajunge


la fibonacci(3) = 2 si fibonacci(4) = 3.
Deci fibonacci(5) = 5
Dupa toate iteratiile avem fibonacci(4) = 3 si fibonacci(5)
= 5, deci fibonacci(6) = 8
fibonacci(6)
Apeleaza f(n-2) si f(n-1) >> f(3) si f(4)
fibonacci(4) + fibonacci(5)

=3 fibonacci(3) fibonacci(4)

Se urmeaza acelasi proces pentru


ramura fibonacci(5)

De mai devreme stim ca vom ajunge


la fibonacci(3) = 2 si fibonacci(4) = 3.
Deci fibonacci(5) = 5
4. Hanoi
4. Hanoi
4. Hanoi
https://www.youtube.com/watch?v=2SUvWfNJSsM&ab_channel=3Blue1Brown
https://www.youtube.com/watch?v=bdMfjfT0lKk&ab_channel=3Blue1Brown

https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw
4. Hanoi (1)

A B C
4. Hanoi (1)
Pas 1:

A B C
4. Hanoi (2)

A B C
4. Hanoi (2)
Pas 1:

A B C
4. Hanoi (2)
Pas 2:

A B C
4. Hanoi (2)
Pas 3:

A B C
4. Hanoi (3)

A B C
4. Hanoi (3)
Pas 1:

A B C
4. Hanoi (3)
Pas 2:

A B C
4. Hanoi (3)
Pas 3:

A B C
4. Hanoi (3)
Pas 4:

A B C
4. Hanoi (3)
Pas 5:

A B C
4. Hanoi (3)
Pas 6:

A B C
4. Hanoi (3)
Pas 7:

A B C
4. Hanoi (4)

A B C
4. Hanoi (4)
Pas 1

A B C
4. Hanoi (4)
Pas 2

A B C
4. Hanoi (4)
Pas 3

A B C
4. Hanoi (4)
Pas 4

A B C
4. Hanoi (4)
Pas 5

A B C
4. Hanoi (4)
Pas 6

A B C
4. Hanoi (4)
Pas 7

A B C
4. Hanoi (4)
Pas 8

A B C
4. Hanoi (4)
Pas 9

A B C
4. Hanoi (4)
Pas 10

A B C
4. Hanoi (4)
Pas 11

A B C
4. Hanoi (4)
Pas 12

A B C
4. Hanoi (4)
Pas 13

A B C
4. Hanoi (4)
Pas 14

A B C
4. Hanoi (4)
Pas 15

A B C
5. Bunny Ears
We have a number of bunnies and each bunny has two big floppy ears. We want
to compute the total number of ears across all the bunnies recursively (without
loops or multiplication).

0 => 0

1 => 2

2=>4

3=>6
5. Bunny Ears
The recursive solution :

1) Check if n = 1. If true return 2.


2) If false, add 2 to the function with n-1
6. Triangle
We have triangle made of blocks. The top most row has 1 block, the next row
down has 3 blocks, the next row has 5 blocks, and so on. Compute recursively the
total number of blocks in such a triangle with the given number of rows.

1
4

16
6. Triangle
Recursive Solution:

1. Loop for each row


2. For each row recursively add 2 for each number of rows.
3. Add the number of triangles in each row to the total.
7. Chocolate and wrappers
Given the following three values, the task is to find the total number of maximum chocolates you can eat.
1. money: Money you have to buy chocolates
2. price: Price of a chocolate
3. wrap: Number of wrappers to be returned for getting one extra chocolate.
7. Chocolate and wrappers
Input: money = 16, price = 2, wrap = 2
Output: 15

Price of a chocolate is 2. You can buy 8 chocolates from amount 16. You can return 8 wrappers back and get 4 more chocolates.
Then you can return 4 wrappers and get 2 more chocolates. Finally you can return 2 wrappers to get 1 more chocolate.

Input: money = 15, price = 1, wrap = 3


Output: 22

We buy and eat 15 chocolates. We return 15 wrappers and get 5 more chocolates. We return 3 wrappers, get 1 chocolate and
eat it (keep 2 wrappers). Now we have 3 wrappers. Return 3 and get 1 more chocolate.

So total chocolates = 15 + 5 + 1 + 1

Input: money = 20, price = 3, wrap = 5

Output: 7
7. Chocolate and wrappers
Solution:

1. Calculate the max initial amount you can buy with money.
2. Recursively calculate the amount of chocolates you can get with wrappers
(updating with number of wrappers with the number of chocolates bought +
modulo of initial chocolates and wrappers needed)
8. Print matrix in spiral order
Given an M × N integer matrix, print it in spiral order.
Input:

[ 1 2 3 4 5 ]

[ 16 17 18 19 6 ]

[ 15 24 25 20 7 ]

[ 14 23 22 21 8 ]

[ 13 12 11 10 9 ]

Output:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
8. Print matrix in spiral order
The idea is to read elements from the given matrix and print the matrix in spiral
order. Four loops are used to maintain the spiral order, each for the top, right,
bottom, and left corner of the matrix.
9. Phrase Combinations
Given n lists of words, print all combinations of phrases that can be formed by picking one word from each list.

Input

list 1 —> [John, Emma]


list 2 —> [Plays, Hates, Watches]
list 3 —> [Cricket, Soccer, Chess]

Output:

John Plays Cricket | John Plays Soccer | John Plays Chess | John Hates Cricket | John Hates Soccer | John Hates
Chess | John Watches Cricket | John Watches Soccer | John Watches Chess |

Emma Plays Cricket | Emma Plays Soccer | Emma Plays Chess | Emma Hates Cricket | Emma Hates Soccer | Emma
Hates Chess | Emma Watches Cricket | Emma Watches Soccer | Emma Watches Chess
10. Replace array element with product of other elements
Given an integer array, replace each element with the product of every other element without using the division
operator.

For example,

Input: { 1, 2, 3, 4, 5 }

Output: { 120, 60, 40, 30, 24 }

Input: { 5, 3, 4, 2, 6, 8 }

Output: { 1152, 1920, 1440, 2880, 960, 720 }


10. Replace array element with product of other elements
The solution is to recursively calculate all elements’ products in the right subarray and pass the left-subarray product in function
arguments.
11. Partition Problem
Given a set of positive integers, check if it can be divided into two subsets with equal sum. For example,

Consider S = {3, 1, 1, 2, 2, 1}

We can partition S into two partitions, each having a sum of 5.

S1 = {1, 1, 1, 2}

S2 = {2, 3}

Note that this solution is not unique. Here’s another solution.

S1 = {3, 1, 1}

S2 = {2, 2, 1}

S-ar putea să vă placă și