Нет условия завершения для вашей рекурсивной функции. Вам нужно передать годы в качестве параметра функции и заменить все эти if n
условия переменными годами.
что-то вроде этого
amt=int(input("Enter Current total in GPF fund\n"))
dud=int(input("Enter Amount Duduction per month for Fund\n"))
d=dud
n=int(input("Enter No. of years you want to calculate\n"))
def cal_cirint(amt,dud,year):
print(f"amt: {amt} dud: {dud} year: {year}")
amt=amt+(dud*12)
amt=amt+(amt*0.08)
if year==1:
return amt
if year>1:
amt += cal_cirint(amt,dud,year-1)
return amt
if year==0:
return 0
print(cal_cirint(amt,dud,n))
И результат выглядит как
Enter Current total in GPF fund
100
Enter Amount Duduction per month for Fund
10
Enter No. of years you want to calculate
3
amt: 100 dud: 10 year: 3
amt: 237.6 dud: 10 year: 2
amt: 386.208 dud: 10 year: 1
1170.51264
Надеюсь, вы поняли логику. Должно быть завершающее условие, в противном случае рекурсивная функция будет работать снова, пока стек не переполнится.