2016-08-17 2 views
0

Я пытаюсь узнать, как помещать числа в массив с номером nsnumber. То, что я застрял, - это: Чтобы построить последовательность в массиве, нам понадобится цикл. Между созданием массива sequence и его возвратом объявите цикл for, счетчик которого ограничен индексом + 1 и увеличивается на единицу. Поскольку последовательность требует двух предыдущих чисел для вычисления следующего, нам нужно загладить последовательность. Нам нужно будет вручную передать в @ 0 и @ 1 первые две итерации цикла. Это то, что у меня есть до сих пор.NSNumber в массивах, ios

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

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

} 

return sequence; 
} 

Я нахожусь на правильном пути? Я не уверен, правилен ли мой цикл for. Я помещаю последовательность в цикл for и добавляю nsnumber @ 0 и @ 1 или я помещаю эти числа в последовательность вне цикла?

ответ

1

Чтобы вставить номер в качестве NSArray, вы должны обернуть их в NSNumber:

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

для выполнения математических операций на 2 NSNumbers, вы должны преобразовать их в целое (или двойной, плавать .. .) до

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

для проблемы с волокном, петля youre верна. Я бы подумал об этом: я добавляю свое значение в цикл for, и если я добавляю 1-й или 2-й элемент, тогда я помещаю 0, иначе я суммирую последние 2 элемента:

- (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

Вы можете очистить код, используя функцию Фибоначчи, которая предоставляет сумму двух последних элементов.

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

Тогда петля также является чище.

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

Мы могли бы обрезать некоторое количество времени от этого жира, но для коротких последовательностей это должно быть ясно и достаточно быстро.

Смежные вопросы