PS
# PerpTo.m4
# https://tex.stackexchange.com/questions/666411/repetitive-perpendiculars-in-a-right-angle-triangle
gen_init

 O: (0,0)
 A: (5,0)
 B: (0,3)

define drawperp { #( depth, O, A, B )
[ d = $1; O[d]: $2; A[d]: $3; B[d]: $4
 P[d]: PerpTo(O[d],A[d],B[d])
 if d > 0 then {
   exec sprintf("drawperp(%g,P[%g],O[%g],A[%g]) with .O[%g] at P[%g]",\
     d-1,d,d,d,d-1,d)
   exec sprintf("drawperp(%g,P[%g],B[%g],O[%g]) with .O[%g] at P[%g]",\
     d-1,d,d,d,d-1,d)
   }
 line outlined graystring((depth-d)/depth) from O[d] to P[d]
 ] }

 depth = 6
 drawperp(depth,O,A,B) with .O[depth] at O
 line from O to A then to B then to O

PE