void f(Bidule b)
, int f(int b)
, int []f(int []b)
, void main(String []args)
Bidule@38e609c9 Bidule@38e609c9 2 12 12 3 3 [I@68c884e 4 [I@68c884e 4
t1
, au retour de la fonction, est affectée à l'adresse du nouveau tableau. Les deux dernières lignes de l'affichage sont de telle sorte que la seconde adresse est nécessairemetn different de la première. D'autre part, la valeur de la case d'indice 0 du tableau vaut 10, le tableau est créé avec des valeurs nulles en son sein, puisque la fonction ajoute 10 au contenu de la case d'indice 0, celle-ci contient désormais la valeur 10. Voici les deux dernière lignes de l'affichage :[I@68c884e 4 [I@7448bc3d 10
public class Zibo { public static int zibonacci(int n) { if (n<=2) return 1; return zibonacci(n-3)+zibonacci(n-1); } public static void main(String []args) { System.out.println(zibonacci(6)); } }
public class ZiboMemoire { public static int zibonacci(int n,int []m) { if (m[n]==0) { if (n<=2) m[n] = 1; else m[n] = zibonacci(n-3,m)+zibonacci(n-1,m); } return m[n]; } public static int zibonacci(int n) { int []memoireZibonacci = new int[n+1]; return zibonacci(n,memoireZibonacci); } public static void main(String []args) { System.out.println(zibonacci(6)); } }
f
et le moment où l'on renvoie sa valeur, une opération (ici une multiplication) intervient.public static int f(int n,int a) { if (n==0) return a; if (n%2==0) return f(n-2,2*a); else return f(n-1,3*a); } public static int f(int n) { return f(n,1); } }
public static int f(int n) { int r = 1; while (!(n==0)) { if (n%2==0) { r = 2*r; n = n-2; } else { r = 3*r; n = n-1; } } return r; }