def find_max_min(arr, idx=0, max_val=None, min_val=None):
# Base case: if the index reaches the end of the array
if idx == len(arr):
return max_val, min_val
# If max_val or min_val is None, initialize them with the first element of the array
if max_val is None:
max_val = arr[idx]
if min_val is None:
min_val = arr[idx]
# Update max_val and min_val based on the current element
if arr[idx] > max_val:
max_val = arr[idx]
elif arr[idx] < min_val:
min_val = arr[idx]
# Recursively call the function with the next index
return find_max_min(arr, idx + 1, max_val, min_val)
# Test the function
arr = [5, 3, 8, 1, 10, 2]
max_val, min_val = find_max_min(arr)
print("Maximum element:", max_val)
print("Minimum element:", min_val)
ZGVmIGZpbmRfbWF4X21pbihhcnIsIGlkeD0wLCBtYXhfdmFsPU5vbmUsIG1pbl92YWw9Tm9uZSk6CiAgICAjIEJhc2UgY2FzZTogaWYgdGhlIGluZGV4IHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgYXJyYXkKICAgIGlmIGlkeCA9PSBsZW4oYXJyKToKICAgICAgICByZXR1cm4gbWF4X3ZhbCwgbWluX3ZhbAogICAgCiAgICAjIElmIG1heF92YWwgb3IgbWluX3ZhbCBpcyBOb25lLCBpbml0aWFsaXplIHRoZW0gd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkKICAgIGlmIG1heF92YWwgaXMgTm9uZToKICAgICAgICBtYXhfdmFsID0gYXJyW2lkeF0KICAgIGlmIG1pbl92YWwgaXMgTm9uZToKICAgICAgICBtaW5fdmFsID0gYXJyW2lkeF0KICAgIAogICAgIyBVcGRhdGUgbWF4X3ZhbCBhbmQgbWluX3ZhbCBiYXNlZCBvbiB0aGUgY3VycmVudCBlbGVtZW50CiAgICBpZiBhcnJbaWR4XSA+IG1heF92YWw6CiAgICAgICAgbWF4X3ZhbCA9IGFycltpZHhdCiAgICBlbGlmIGFycltpZHhdIDwgbWluX3ZhbDoKICAgICAgICBtaW5fdmFsID0gYXJyW2lkeF0KICAgIAogICAgIyBSZWN1cnNpdmVseSBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBuZXh0IGluZGV4CiAgICByZXR1cm4gZmluZF9tYXhfbWluKGFyciwgaWR4ICsgMSwgbWF4X3ZhbCwgbWluX3ZhbCkKCiMgVGVzdCB0aGUgZnVuY3Rpb24KYXJyID0gWzUsIDMsIDgsIDEsIDEwLCAyXQptYXhfdmFsLCBtaW5fdmFsID0gZmluZF9tYXhfbWluKGFycikKcHJpbnQoIk1heGltdW0gZWxlbWVudDoiLCBtYXhfdmFsKQpwcmludCgiTWluaW11bSBlbGVtZW50OiIsIG1pbl92YWwpCg==