circleMap.nb
Define a continuous function g: R to R such that g(x+1) = g(x) + w, for all x, and for some integer w (the winding number of the *map*). 
An important case is w = 1.
Such a function g is the lift of a map on the circle S1 = R/Z, which we can describe as [0, 1) with the metric defined by d(x,y) = min(Abs(x-y), 1-Abs(x-y)).

Based on iteratedMap1D.nb  (1-dimensional)
version 1.5 (2021-03-03) Variables a, x, etc. are made local in the runIteratedMap function.

runCircleMap := Module[{cobwebDiagram, a, x, xm, newx, iterates, initialPoint},
nList = Range[0, nIterations];
x = N[x0];  
gS1[x_]:= g[x] - Floor[g[x]];
Do[x = gS1[x], {nTransients}];
If[nTransients > 0, Print["Initial point = ", x0, ". Start plotting after ", nTransients, " iterates at x = ", x] ];
initialPoint = Point[{x,x}];
path = {{x, x}};
iterates = {x};  (* this will give the seqence of iterates *)
Do[
newx = gS1[x];
iterates = AppendTo[iterates, newx];
path = Join[path, {{x, newx}, {newx, newx}}];
x = newx,
{nIterations}  (*Do it this many times *)
];
cobwebDiagram = Plot[{gS1[x], x}, {x, 0, 1}, AspectRatio -> Automatic (* y = x is 45° degree line *), PlotRange -> {0,1},PlotStyle ->{Automatic, Dotted}, Epilog -> {PointSize[Large],initialPoint,Line[path]}
];
Print@TableForm[{nList, iterates}, TableHeadings-> {{"n", "x_n"}, None}];
Show[cobwebDiagram]
];

Here is a circle map that does not have a sink at 1/2.

g[x_] :=x + .2((Cos[ Pi x])^2);
x0 = .55;
nTransients = 0;
nIterations =100;
(* Define parameters before running Module *)
runCircleMap

Here is a famous 2-parameter family of circle maps.  
The function f is a lift of an orientation preserving homeomorphism of the circle, when abs[b] <= 1.
See the Wikipedia page on rotation number.  
As a possible project, compute the rotation number ω(f) for the parameter 0 < a <= 1 with b fixed.  (Do this for a few values of b, including b = 1.) 
Do some web research to help explain the results.  (Hint: This function is sometimes called a Devil’s Staircase)

f[x_] := x +  a - b/(2 π) Cos[ 2π x]  
g[x_] := Nest[f,x, nthIterate]
a = .25; (* Try an irrational number with b = 0 *)  (* Try a = .28, b = .9. This has rotation number 1/4 *)
b = 0;
x0 = .1;
nthIterate = 1;
nTransients = 100;
nIterations =100;
(* Define parameters before running Module *)
runCircleMap

Here is a function with g(x+1) = g(x) -1 for all x.

f[x_] := -x +  a + b/(2 π) Cos[ 2π x]  
g[x_] := Nest[f,x, nthIterate]
a = .2; (* Try an irrational number *)
b = .5;
x0 = .1;
nthIterate = 1;
nTransients = 0;
nIterations =1000;
runCircleMap

Here is a function with g(x+1) = g(x) +2 for all x.

f[x_] := 2x +  a + b/π Cos[ 2π x]  
g[x_] := Nest[f,x, nthIterate]
a = .2; (* Try an irrational number *)
b =.5;
x0 = .1;
nthIterate = 1;
nTransients = 0;
nIterations =100;
runCircleMap