Одно из возможных решений
fun countDown(startCounter: Long, nextCounter: Long): Observable<Long> {
return Observable.intervalRange(startCounter, startCounter+2, 0, 1, TimeUnit.SECONDS)
.map { 2*startCounter - it }
.flatMap { if(it >= 0) Observable.just(it) else countDown( nextCounter, nextCounter) }
}
А затем используйте его как
countDown(13, 30)
.subscribeOn(Schedulers.computation())
.subscribe({
System.out.println(it.toString())
}, {
it.printStackTrace()
})
Результат должен быть таким, как вы ожидали.