Récursive

LeLaidLeLaid Membre
08:47 modifié dans API AppKit #1
Salut à  tous.

Une question pour débutant (que je suis):
Peut-on utiliser la récursive dans une méthode d'instance?

Puis-je par exemple écrire quelque chose comme ceci:

@implementation MaClass<br />- (void) calculmoi: (int) moi avectoi: (MaClass *) toi<br />{<br />&nbsp;  if(moi == 0)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; moi--;<br />&nbsp; &nbsp; &nbsp; &nbsp; [toi calculmoi: moi avectoi: toi];<br />&nbsp; &nbsp; }<br />&nbsp;  else<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp;  // Plein de choses<br />&nbsp; &nbsp; }<br />}


Merci d'avance pour vos lumières  :why?:

Réponses

  • schlumschlum Membre
    08:47 modifié #2
    dans 1235048248:

    Salut à  tous.

    Une question pour débutant (que je suis):
    Peut-on utiliser la récursive dans une méthode d'instance?

    Puis-je par exemple écrire quelque chose comme ceci:

    @implementation MaClass<br />- (void) calculmoi: (int) moi avectoi: (MaClass *) toi<br />{<br />&nbsp; &nbsp;if(moi == 0)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; moi--;<br />&nbsp; &nbsp; &nbsp; &nbsp; [toi calculmoi: moi avectoi: toi];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp;else<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp;// Plein de choses<br />&nbsp; &nbsp; }<br />}
    


    Merci d'avance pour vos lumières  :why?:


    Oui... Mais dans ton code, t'es sûr que c'est pas "moi!=0" que tu voulais écrire ?

    PS : l'Objective-C est dramatiquement lent pour faire du récursif... Passage en C conseillé. Ou alors utiliser les IMP
  • LeLaidLeLaid Membre
    08:47 modifié #3
    Effectivement c'est != 0...
    Bon je vais essayer de faire une routine C et de l'appeller dans ma methode....

    Merci
  • GreensourceGreensource Membre
    08:47 modifié #4
    Je me permet de m'incruster ;)
    À propos du C inclu dans de l'Objc, sauriez-vous où trouver de la bonne doc? Où bien celle d'Apple suffit?
  • schlumschlum Membre
    08:47 modifié #5
    dans 1235051665:

    Je me permet de m'incruster ;)
    À propos du C inclu dans de l'Objc, sauriez-vous où trouver de la bonne doc? Où bien celle d'Apple suffit?


    Une bonne doc pour quoi ? Récupérer les adresses de méthodes comme pointeurs de fonctions C (IMP) ? L'utilisation de objc_msgSend ?
  • AliGatorAliGator Membre, Modérateur
    08:47 modifié #6
    Par contre ton appel reccursif est mauvais : c'est sur "self" qu'il faut rappeler la méthode reccursivement :
    [self calculmoi: moi avectoi: toi];
    
  • LeLaidLeLaid Membre
    08:47 modifié #7
    dans 1235062125:

    Par contre ton appel reccursif est mauvais : c'est sur "self" qu'il faut rappeler la méthode reccursivement :
    [self calculmoi: moi avectoi: toi];
    



    Oui oui, j'ai vu ça. Ca marche... parcontre effectivement ça galère vite :)
    Merci
  • AliGatorAliGator Membre, Modérateur
    08:47 modifié #8
    Oui d'où le bon conseil de schlum de passer au C pour ce genre d'algo.

    Ou au moins d'utiliser les IMP (cf la doc sur NSObject), qui te permettent d'avoir au début de ta boucle quelque part directement un pointeur de fonction C (correspondant à  ton @selector de méthode Objective-C), pour accélérer un peu... mais autant pour une boucle qui appelle souvent une méthode donnée c'est une solution, autant pour du récursif autant directement coder ça en C pur.
Connectez-vous ou Inscrivez-vous pour répondre.