begin if then ( - )draw line( ) ( - )draw line( * ) ( - )draw line( ) ( - end end bprocedure (kinteger)begin if then ( - )draw line( ) ( - )draw line( * ) ( - )draw line( ) ( - end end cprocedure (kinteger)begin if then ( - )draw line( ) ( - )draw line( * ) ( - )draw line( ) ( - end end dprocedure sierpinski(ninteger)const squaresize var ix integerbegin draw clearh :squaresize div :draw width div :draw height div hi : repeat inc( ) : -hh : div : +hdraw set( ) ( )draw line( , ) ( )draw line( , ) ( )draw line( , ) ( )draw line( ,huntil end sierpinski the elegance of the use of recursion in these exampes is obvious and convincing the correctness of the programs can readily be deduced from their structure and composition patterns moreoverthe use of an explicit (decreasinglevel parameter guarantees termination since the depth of recursion cannot become greater than in contrast to this recursive formulationequivalent programs that avoid the explicit use of recursion are extremely cumbersome and obscure trying to understand the programs shown in [ - should easily convince the reader of this