Python тілінде жазылған рекурсивті функция берілген:
def f(s):
if len(s) <= 2:
return s
return f(s[1:-1]) + s[-1] + s[0]
f("ABCDEFG") орындалғанда f функциясы барлығы неше рет шақырылады (бірінші шақыруды қоса) және осы шақыру қандай мән қайтарады?
Жауап пен талдауды көрсетуЖауап пен талдауды жасыру
Дұрыс жауап
- A4 шақыру; DECFBGA
Талдау
s[1:-1] кесіндісі бірінші және соңғы таңбаларды алып тастайды. Шақырулар тізбегі: f("ABCDEFG") -> f("BCDEF") -> f("CDE") -> f("D"). "D" жолының ұзындығы 1 (2-ден аспайды), сондықтан рекурсия тоқтайды: барлығы 4 шақыру. Қайтарылатын мән: f("D") = "D"; f("CDE") = "D" + "E" + "C" = "DEC"; f("BCDEF") = "DEC" + "F" + "B" = "DECFB"; f("ABCDEFG") = "DECFB" + "G" + "A" = "DECFBGA". Жауабы: «4 шақыру; DECFBGA». «DCEBFAG» нұсқасы s[0] + s[-1] ретін қате алғанда шығады, «GAFBECD» таңбаларды рекурсия нәтижесінің алдына қосқанда шығады, ал «3 шақыру» базалық жағдайдағы шақыруды ескермейді.