Vector shape and Dimensions

I think I have not understood clearly the difference between dimension and shape. I want to construct a vector remembering recurrence of the type :

({{f},{g}}) = ({{1},{1}})

{{f[n_]},{g[n_]}}) := ({{f[n]},{g[n]}}) = ({{0.2 f[n - 1] +  g[n - 1] + 1}, { f[n - 1] + 0.2 g[n - 1] + 1}} )

gives the following error

SetDelayed::shape: Lists {{f[n]},{g[n]}} and {{f[n]},{g[n]}}={{0.2 f[n-1]+g[n-1]+1},{f[n-1]+0.2 g[n-1]+1}} are not the same shape.

but according to Dimensions they are both equal to

{2, 1}

So what is the difference between shape and dimensions

When you use something like:

{a, b} := {1, 2}

This gets interpreted as:

a := 1; b := 2

as long as both sides are lists of the same length. If they are not, then it doesn't work:

{a, b} := Range

SetDelayed::shape: Lists {a,b} and Range are not the same shape.

\$Failed

Now consider your example:

Hold[{{f[n], g[n]}} := {{f[n], g[n]}} = rhs] //FullForm

Hold[SetDelayed[List[List[f[n],g[n]]],Set[List[List[f[n],g[n]]],rhs]]]

Note that the RHS of SetDelayed is a an object with head Set, not a nested list. This is why it doesn't work. You could try the following instead:

Clear[f,g]

{{f}, {g}} = {{1},{1}};

f[n_] := (
{{f[n]}, {g[n]}} = {{f[n]},{g[n]}}={{0.2 f[n-1]+g[n-1]+1},{f[n-1]+0.2 g[n-1]+1}}
)[[1, 1]]

g[n_] := (
{{f[n]}, {g[n]}} = {{f[n]},{g[n]}}={{0.2 f[n-1]+g[n-1]+1},{f[n-1]+0.2 g[n-1]+1}}
)[[1, 2]]

Then:

f

5.368

and let's check that definitions for both f and g have been cached:

Definition[f]
f=1
f=2.2
f=3.64
f=5.368
f[n_]:=({{f[n]},{g[n]}}={{f[n]},{g[n]}}={{0.2 f[n-1]+g[n-1]+1},{f[n-1]+0.2 g[n-1]+1}})[[1,1]]

and:

Definition[f]
g=1
g=2.2
g=3.64
g=5.368
g[n_]:=({{f[n]},{g[n]}}={{f[n]},{g[n]}}={{0.2 f[n-1]+g[n-1]+1},{f[n-1]+0.2 g[n-1]+1}})[[1,2]]