Recur14. Вывести значение целочисленного выражения, заданного в виде строки S. Выражение определяется следующим образом:
<выражение> ::=
<цифра> |
<выражение> + <цифра> |
<выражение> - <цифра>

Решение на Python 3:

import random
import string
import numpy as np

def RndExpr():
N = random.randrange(2,11)
lst_digit = list(np.random.choice(list(string.digits), N))
lst_oper = list(np.random.choice(['+','-'], N-1))
result = [None]*(2*N - 1)
result[::2] = lst_digit
result[1::2] = lst_oper
return "".join(result)

def Calc(S):
#print(S)
n = len(S)
if n > 1:
x = int(S[n-1])
oper = S[n-2]
if oper == "+":
return Calc(S[:-2]) + x
else:
return Calc(S[:-2]) - x
return int(S[0])

for i in range(0,5):
s = RndExpr()
print()
print(s, "=" ,eval(s))
print(s, "=" ,Calc(s))