2016-08-17 1 views
0

J'essaie d'apprendre comment mettre des nombres dans un tableau avec nsnumber. La chose exacte à laquelle je suis confronté est, Pour construire la séquence dans le tableau, nous allons avoir besoin d'une boucle. Entre la création du tableau de séquence et son renvoi, déclarez une boucle for dont le compteur est limité par l'index + 1 et incrémente d'une unité. Puisque la séquence nécessite les deux nombres précédents pour calculer le suivant, nous devons amorcer la séquence. Nous allons devoir passer manuellement @ 0 et @ 1 sur les deux premières itérations de la boucle. C'est ce que j'ai jusqu'ici.NSNumber dans les tableaux, ios

(NSArray *)arrayWithFibonacciSequenceToIndex:(NSUInteger)index 
{ 
NSMutableArray *sequence = [NSMutableArray array]; 

for(NSUInteger i = 0; i < 1; i++) 
{ 
    index = i+1; 

} 

return sequence; 
} 

Suis-je sur la bonne voie? Je ne suis pas sûr si ma boucle for est correcte. Est-ce que je mets une séquence dans la boucle for et y ajoute le nsnumber @ 0 et @ 1 ou est-ce que je mets ces nombres dans la séquence en dehors de la boucle?

Répondre

1

Pour insérer un numéro dans un NSArray, vous devez les envelopper dans un NSNumber:

NSInteger a = 5; 
NSNumber number = @(a); // ou @5; 

pour effectuer des opérations mathématiques sur 2 NSNumbers, vous devez les convertir en entier (ou double, flotter .. .) avant

NSNumber * number1 = @1; 
NSNumber * number2 = @6; 
NSInteger sum = [number1 integerValue] + [number2 integerValue]; 

pour le problème fib, Youre boucle est correcte. La façon dont je penserais ceci est: j'ajoute ma valeur dans la boucle for, et si j'ajoute le 1er ou 2ème élément, alors je mets un 0, sinon je somme les 2 derniers éléments:

- (NSArray *) fibbonacciSequenceWithSize:(NSInteger)size 
{ 
    NSMutableArray * result = [NSMutableArray new]; 

    for(NSInteger idx = 0; i < size ; i ++) 
    { 
     // first 2 numbers of fib sequence are 1 
     if(idx == 0 || idx == 1) 
     { 
      [result addObject:@1]; 
     } 
     else 
     { 
      // Add the 2 previous number 
      // F2 = F1 + F0 
      NSinteger next = [result[idx - 2] integerValue] + [result[idx - 1] integerValue]; 

      [result addObject:@(next)]; 
     } 
    } 
    return [result copy]; // copy the NSMutableArray in a NSArray 
} 
0

Vous pouvez nettoyer le code en ayant une fonction Fibonacci qui fournit la somme des deux derniers éléments.

- (NSNumber *)nextFibInArray:(NSArray *)array { 
    if (array.count < 2) return @1; 
    NSInteger lastIndex = array.count - 1; 
    return @([array[lastIndex-1] intValue] + [array[lastIndex] intValue]); 
} 

Ensuite, la boucle est également plus propre.

- (NSArray *)fibonacciWithLength:(NSInteger)length { 
    NSMutableArray *result = [@[] mutableCopy]; 
    for (NSInteger i=0; i<length; i++) { 
     [result addObject:[self nextFibInArray:result]]; 
    } 
    return result; 
} 

Nous pourrions réduire la durée d'exécution de la graisse, mais pour des séquences assez courtes, cela devrait être clair et rapide.