Некоторые функциональные языки поддерживают этот вид конструкции.
В Mathematica, например, вы можете определить:
f[i_, n_: 3] := Nest[# + 7 &, i, n];
Где 3 - значение по умолчанию для n.
Итак
f[2]
Возвращает
23 -> (2+7+7+7)
и
f[4,1]
Возвращает
11 (-> 4+7)
Конечно, вы также можете определить
f[i_] := Nest[# + 7 &, i, 3];
если вам не нужно настраивать количество рекурсивных вызовов.
Возможно, это более интересно. Вы также можете запросить все промежуточные результаты.
Итак, если вы определите:
g[i_, n_: 3] := NestList[# + 7 &, i, n];
тогда
g[2] Returns {2, 9, 16, 23}