Derivada no r de forma recursiva

Olá. Estou tentando generalizar a função da figura abaixo.

image

Segue um exemplo com n=4

al=.5
w = 2
n=4
k2=(2-1-al)/al # 1
k3=(3-1-al)/al # 3
k4=(4-1-al)/al # 5


A1 = 1
dA1 = D(A1,"w")  # derivando

A2 = substitute((k2+w)*A1 - w*dA1,list(A1=A1,dA1=dA1))
dA2 = D(A2,"w") # derivando
  
A3 = substitute((k3+w)*A2 - w*dA2,list(A2=A2,dA2=dA2))
dA3 = D(A3,"w") # derivando

A4 = substitute((k4+w)*A3 - w*dA3,list(A3=A3,dA3=dA3))

eval(A4)

Alguma ideia de como generalizar?

Possível Solução

rm(list = ls())
require(tidyr)
require(memisc)
al=.5
n=4
w = "w";var="w"
A_aux = D_aux=list()
A_aux[1] = 1
D_aux[1] = 0
for(i in 2:n){
  assign(paste0("k",i),((i-1-al)/al))
  expr = paste0("(k",i,"+",w,")*A","-",w,"*dA") %>% str2lang()
  aux.A=A_aux[[i-1]]
  aux.dA=D_aux[[i-1]]
  A_aux[[i]] = memisc::Substitute(expr,list(A=aux.A,dA=aux.dA))
  D_aux[[i]] = A_aux[[i]]  %>% D(var)
}
w = 2
eval(A_aux[[i]])