L'idée générale de récursion est d'avoir une position de terminaison qui retourne une valeur constante de quelque sorte et tous les autres cas est construit au-dessus de cela.
Par exemple, la fonction factoriel, f(n) = n * (n-1) * (n-2) * ... * 2 * 1
a la condition de terminaison et les fonctions dépendantes suivantes:
f(1) = 1
f(n) = n * f(n-1) for all n > 1
donc pourrait être mis en œuvre:
def factorial(n):
if n == 1:
return 1;
return n * factorial(n-1)
Dans votre cas, la condition de terminaison est quand l'une ou l'autre des cordes est vide, à ce moment-là, vous venez de coller l'autre corde à la fin. La fonction dépendante est simplement de saisir le premier caractère de la première chaîne puis d'appeler le niveau suivant en passant le reste de cette chaîne et l'autre chaîne, mais dans l'ordre inverse pour que vous alterniez.
def mix (s1, s2):
if s1 == "" return s2
if s2 == "" return s1
return s1.firstChar() + mix (s2, s1.allButFirstChar());
En Java, ceci se traduirait par ce qui suit. Soyez averti que, si ce sont les devoirs et que vous l'utilisez, vous aurez probablement échoué car vous seriez stupide de penser que vos éducateurs ne surveillent pas ces sites.
public class Demo {
public static String Mix (String s1, String s2) {
if (s1.length() == 0) return s2;
if (s2.length() == 0) return s1;
return s1.substring(0,1) + Mix (s2, s1.substring(1));
}
public static void main(String[] args) {
System.out.println (Mix ("Hello", "There"));
System.out.println (Mix ("Hi", "There"));
System.out.println (Mix ("Hello again", "Pax"));
System.out.println (Mix ("", ""));
System.out.println (Mix ("1111", ""));
System.out.println (Mix ("111", "2"));
System.out.println (Mix ("111", "22"));
System.out.println (Mix ("111", "222"));
System.out.println (Mix ("111", "2222"));
System.out.println (Mix ("11", "2222"));
System.out.println (Mix ("1", "2222"));
System.out.println (Mix ("", "2222"));
}
}
sorties:
HTehlelroe
HTihere
HPealxlo again
1111
1211
12121
121212
1212122
121222
12222
2222
Pourquoi voulez-vous faire cela? Ce n'est pas, peut-être, les devoirs? – bmargulies