DSA 23: Recursion - In-Place Modification [Part 4]

Creating & Modifying Arrays
data structures
algorithms
Author

Tony Phung

Published

February 6, 2025

1. New Array: iterative for approach

def dbl_new_array(arr:list):
    new_arr = []
    for ar in arr:
        new_arr.append(ar*2)
    return new_arr

arr=[1,2,3,4,5]
new_arr = dbl_new_array(arr)
print(f"id:{id(arr)}: {arr}")
print(f"id:{id(new_arr)}: {new_arr}")
(id:140442015412800: [1, 2, 3, 4, 5]
(id:140442143645760: [2, 4, 6, 8, 10]

2. Same Array with In-Place modification: iterative for approach

def dbl_arr_iter(arr:list):
    for i in range(len(arr)):
        # print(arr[i])
        arr[i]*=2
    return arr

arr=[1,2,3,4,5]
new_arr = dbl_arr_iter(arr)
print(f"id:{id(arr)}: {arr}")
print(f"id:{id(new_arr)}: {new_arr}")
(id:140442015415744: [2, 4, 6, 8, 10]
(id:140442015415744: [2, 4, 6, 8, 10]

3. Same Array with In-Place modification: iterative while approach

def dbl_arr_while(arr: int, i=0):
    while i < len(arr):
        arr[i]*=2
        i+=1
    return arr
    
arr=[1,2,3,4,5]
new_arr = dbl_arr_while(arr)
print(f"id:{id(arr)}: {arr}")
print(f"id:{id(new_arr)}: {new_arr}")
(id:140442015475456: [2, 4, 6, 8, 10]
(id:140442015475456: [2, 4, 6, 8, 10]

4. Recursive approach

4.1 In-Place modification: nothing returned

def dbl_array_recurse1(arr, i = 0):
    if i >= len(arr):
        return 
    arr[i]*=2 
    dbl_array_recurse1(arr,i+1)

arr=[1,2,3,4,5]

new_arr = dbl_array_recurse1(arr) # nothing returned as in-place modification
print(f"id:{id(arr)}: {arr}")
print(f"id:{id(new_arr)}: {new_arr}")
id:139727162733888: [2, 4, 6, 8, 10]
id:139727776920536: None

4.1 In-Place modification & Same Array return

def dbl_arr_recurse2(arr: int, i=0):
    if i >= len(arr):
        return arr
    arr[i]*=2
    return dbl_arr_recurse2(arr,i+1) # fixed

arr=[1,2,3,4,5]
new_arr = dbl_arr_recurse2(arr)
print(f"id:{id(arr)}: {arr}")
print(f"id:{id(new_arr)}: {arr}")
(id:140442015584000: [2, 4, 6, 8, 10]
(id:140442015584000: [2, 4, 6, 8, 10]
def dbl_arr_recurse3(arr: int, i=0):
    if i >= len(arr):
        return
    arr[i]*=2
    dbl_arr_recurse3(arr,i+1) # fixed

arr=[1,2,3,4,5]
new_arr = dbl_arr_recurse3(arr)
print(f"id:{id(arr)}: {arr}")
print(f"id:{id(new_arr)}: {arr}")
id:139727162734144: [2, 4, 6, 8, 10]
id:139727776920536: [2, 4, 6, 8, 10]