M <- function(m, s, init = 0) { A <- nrow(m); T <- ncol(m) M <- matrix(init, nrow = A, ncol = T) for(a in 1:(A-1)) { M[a+1, 2:T] <- (s[a] * (M[a, ] + m[a, ]))[1:(T-1)] } M } This is from a mark-recapture study where M is an estimate of the number of marked fish in each age class (A) over each year (T). s is a vector of age dependent survival probabilities and m is a matrix containing the number of fish marked for the first time (in each age class and year). I'm pretty sure there's a much better way of doing this - but I can't see it. I'm not looking for the exact code to solve the problem - just a better way of attacking it. Any hints would be much appreciated! Hadley