It sounds like you might be wrestling with the concept of scriptcontext.
not that you have to switch between the two for your script to work, it just may help you understand how Rhino sees geometry VS how Grasshopper “sees” geometry.
see if this helps:
import rhinoscriptsyntax as rs
#you need to store the geometry that GH creates somewhere
circles = []
def RecursiveCircle(pt, r):
if r == 0:
pass
else:
#recursion loop starts here
#do something: make circle and add to list (Grasshopper document)
circles.append(rs.AddCircle(pt, r))
#change your variable by something
r -=1
#call your function again with updated variable
RecursiveCircle(pt, r)
#do this until your if statement/condition is met
try:
#call your function
RecursiveCircle(pt, r)
except:
pass
a = circles