The code below provides an example of a simple recursive function that displays a PShape in a pattern. In this example, the PShape is created within the recursive function. A more modular approach is to create a recursive function that takes the PShape as an input parameter, as the repeat structure can be applied to any PShape to create a similar pattern.
//Recursion and PShapes//voidsetup(){size( 600,600);colorMode(HSB,360,100,100);//drawCircle( width/2, height/2, 500 ); //call shiffman's recursive function//PShape myShape1 = createPShape1( 200); //test creating 1 shape//shape( myShape1, 200, 200); //render test shape on canvasrecursiveMotif( 5,200); //call custom recursive function }//create a PShape based on size input parameter//return a variable that points to the new PShape objectPShapecreatePShape1( float size){PShape s =createShape(RECT,0,0,size, size);return s; }//recursive function, takes count and size as input params//count controls number of repeats, size used as input to createPShapevoidrecursiveMotif( int count,float size ){if( count <1){return; //terminate }//task: make a shape, render the shapePShape myShape1 =createPShape1( size); //call custom shape functionshape( myShape1,0,0); //render the shape to canvasrecursiveMotif( count-1, size *0.8); //changes in input paramter values control behaviour of recursive call: }//Shiffman's recursive circles: Example 8.3//https://natureofcode.com/book/chapter-8-fractals/voiddrawCircle( float x,float y,float diameter ){if( diameter <25){ //termination conditionreturn; }fill( 270,100,100);//noFill();ellipse( x, y, diameter, diameter); //taskdrawCircle( x + diameter/2, y, diameter/2 ); //recursive calldrawCircle( x - diameter/2, y, diameter/2 ); //recursive calldrawCircle( x, y + diameter/2, diameter/2 ); //recursive calldrawCircle( x, y - diameter/2, diameter/2 ); //recursive callellipse( x, y, diameter, diameter); //task }