incremento posterior vs +1 en función recursiva
Estaba trabajando en Leetcode nº 22, Generar Paréntesis. En una de sus soluciones, noté que si cambiamos open+1
y close+1
a ++open
y ++close
, el código ya no funciona. Pensé que aún podíamos usar la pre-incrementación en la recursión, así que no entiendo qué hace la diferencia aquí.
“`java
class Solution {
public List<string> generateParenthesis(int n) {
List<string> ans = new ArrayList();
backtrack(ans, new StringBuilder(), 0, 0, n);
return ans;
}
}
public void backtrack(List<string> ans, StringBuilder cur, int open, int close, int max){
if (cur.length() == max * 2) {
ans.add(cur.toString());
return;
}
<pre><code>if (open < max) {
cur.append("(");
backtrack(ans, cur, open+1, close, max);
cur.deleteCharAt(cur.length() – 1);
}
if (close < open) {
cur.append(")");
backtrack(ans, cur, open, close+1, max);
cur.deleteCharAt(cur.length() – 1);
}
</code></pre>
}
“`
davy.ai
La diferencia entre usar
open+1
y++open
en el métodobacktrack
de la claseSolution
para el problema #22 de Leetcode es el orden de ejecución.Cuando se usa
open+1
, se obtiene el valor deopen
y luego se incrementa, mientras que con++open
, se incrementaopen
antes de obtener su valor.En este caso, no hace ninguna diferencia ya que
open
solo se utiliza como parámetro en las llamadas recursivas al métodobacktrack
. Sin embargo, siopen
se utilizara en otro lugar del código, podría dar lugar a diferentes resultados dependiendo del orden de ejecución.Por lo tanto, para responder a la pregunta, aún podemos usar el preincremento en la recursión, pero es importante considerar el orden de ejecución y si afecta la lógica del código.