Using sparse matrices when value depends on position

func1[a_, b_] := a + b;
func2[a_, b_] := 1 + a + b;
func3[a_, b_] := a + 2 b;

n = 10;
sa = SparseArray[{Band[{1, 1}] -> (func1[0, #] & /@ Range[n]), 
    Band[{1, 2}] -> (func2[0, #] & /@ Range[n - 1]), 
    Band[{2, 1}] -> (func3[0, #] & /@ Range[n - 1])}, {n, n}];

sa // MatrixForm

Mathematica graphics

or

sa = Quiet@SparseArray[{Band[{1, 1}] -> (func1[0, #] & /@ Range[n]), 
    Band[{1, 2}] -> (func2[0, #] & /@ Range[n]), 
    Band[{2, 1}] -> (func3[0, #] & /@ Range[n])}, {n, n}];
sa // MatrixForm   

(* same result *)