Je n’aime pas me faire coller par un (ancien) étudiant !… mais j’ai trouvé la solution très jolie, alors je vais en garder la trace dans mon “cahier de recherche” qu’est mon blog. La question était simple :
Comment permuter les valeurs de deux variables, sans créer de variable temporaire ?
On a ainsi deux variables, et
, on veut les permuter :
doit prendre la valeur de
, et inversement….
> a=1 > b=2 > a [1] 1 > b [1] 2
Oui, c’est possible… en utilisant l’astuce suivante
> a=b-a > b=b-a > a=a+b > a [1] 2 > b [1] 1
Amusant, non ?
Mais il est possible d’utiliser plein d’autres fonctions . Moyennant parfois quelques hypothèses supplémentaires. Par exemple, si les nombres sont strictement plus grands que 1,
> a=5.6 > b=4.3 > a [1] 5.6 > b [1] 4.3
on peut utiliser
> a=a^b > b=a^(1/b) > a=log(a,b) > a [1] 4.3 > b [1] 5.6
Je suppose qu’on peut continuer à creuser pour en trouver d’autres. Par contre, je n’ai pas encore réussi à généraliser sur une permutation de cycle de longueur 3 (les trois permutent vraiment tous)…. je suis preneur !
OpenEdition suggests that you cite this post as follows:
Arthur Charpentier (September 12, 2014). Permuter, sans créer de variable temporaire. Freakonometrics. Retrieved February 15, 2025 from https://doi.org/10.58079/ouwt