discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

Why are recursive definitions slow ?

I
Ivo
Sun, Apr 19, 2015 3:07 PM

I have the same object defined by recursive and by iteration. De iterative
definition is much faster on rendering.

Can someone provide some insight why this is ?

==== example ====

num=20;

module ring(){
rotate_extrude() translate([10,0,0]) circle(r=2);
}

module ring_r(count,maxcount,angle) {
if (count<=maxcount) {
ring();
if ((count%4)==0)
rotate([0,0,angle]) translate([14,0,0]) rotate([90,0,0])
ring_r(count+1,maxcount,angle);
if ((count%4)==1)
rotate([0,angle,0]) translate([14,0,0]) rotate([90,0,0])
ring_r(count+1,maxcount,angle);
if ((count%4)==2)
rotate([0,0,-angle]) translate([14,0,0]) rotate([90,0,0])
ring_r(count+1,maxcount,angle);
if ((count%4)==3)
rotate([0,-angle,0]) translate([14,0,0]) rotate([90,0,0])
ring_r(count+1,maxcount,angle);
}
}

module iterative() {
for (i=[0:num-1])
rotate([0,0,i360/num])
translate([40,0,0])
rotate([0,i
90,0])
scale([0.7,1,1])
ring();
}

module nested() {

}

module recursive() {
ring_r(0,19,18);
}

//iterative();
recursive();

--
View this message in context: http://forum.openscad.org/Why-are-recursive-definitions-slow-tp12427.html
Sent from the OpenSCAD mailing list archive at Nabble.com.

I have the same object defined by recursive and by iteration. De iterative definition is much faster on rendering. Can someone provide some insight why this is ? ==== example ==== num=20; module ring(){ rotate_extrude() translate([10,0,0]) circle(r=2); } module ring_r(count,maxcount,angle) { if (count<=maxcount) { ring(); if ((count%4)==0) rotate([0,0,angle]) translate([14,0,0]) rotate([90,0,0]) ring_r(count+1,maxcount,angle); if ((count%4)==1) rotate([0,angle,0]) translate([14,0,0]) rotate([90,0,0]) ring_r(count+1,maxcount,angle); if ((count%4)==2) rotate([0,0,-angle]) translate([14,0,0]) rotate([90,0,0]) ring_r(count+1,maxcount,angle); if ((count%4)==3) rotate([0,-angle,0]) translate([14,0,0]) rotate([90,0,0]) ring_r(count+1,maxcount,angle); } } module iterative() { for (i=[0:num-1]) rotate([0,0,i*360/num]) translate([40,0,0]) rotate([0,i*90,0]) scale([0.7,1,1]) ring(); } module nested() { } module recursive() { ring_r(0,19,18); } //iterative(); recursive(); -- View this message in context: http://forum.openscad.org/Why-are-recursive-definitions-slow-tp12427.html Sent from the OpenSCAD mailing list archive at Nabble.com.