Задача Эйлера проекта № 2 в быстрой сумме чисел Фибоначчи ниже 4 миллионов - PullRequest
0 голосов
/ 11 июня 2019

Я очень плохо знаком с программированием и пытаюсь изучить Swift, выполняя задачи Project Euler.Кажется, у меня есть разные версии кода Swift, которые вызывают множество ошибок.Если у вас есть какие-либо рекомендации относительно форматирования моего вопроса для дальнейшего использования, пожалуйста, дайте мне знать, спасибо.

Ниже приведены некоторые примеры того, на что я смотрел.

Пример 1

    let nextState = { (state: inout T) -> T? in
        // Return `nil` if condition is no longer satisfied:
        guard condition(state) else { return nil }
        // Update current value _after_ returning from this call:
        defer { state = next(state) }
        // Return current value:
        return state
    }
    return sequence(state: first, next: nextState)
}

Пример 2

// F[n] = F[n-1] + F[n-2]
// 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144
// Find the fibonacci number for n interations
func fibonacci(n: Int) {

    var num1 = 0
    var num2 = 1

    for _ in 0 ..< n {

        let num = num1 + num2
        num1 = num2
        num2 = num
    }

    print("result = \(num2)")
}
fibonacci(7)


// Using Recursion
func fibonacciRecursiveNum1(num1: Int, num2: Int, steps: Int) {

    if steps > 0 {
        let newNum = num1 + num2
        fibonacciRecursiveNum1(num2, num2: newNum, steps: steps-1)
    }
    else {
        print("result = \(num2)")
    }
}
fibonacciRecursiveNum1(0, num2: 1, steps: 7)

Пример 3

    return SequenceOf { _ -> GeneratorOf<Int> in
        var (a, b) = (1, 0)
        return GeneratorOf {
            (b, a) = (a, b + a)
            if b > max { return nil }
            return b
        }
    }
}


let sum = reduce(fibonacciTo(4_000_000), 0) {a, n in (n % 2 == 0) ? a + n : a }

В примерах кода, который я посмотрел, я получаюошибки, которые, как мне кажется, имеют отношение к несовместимым версиям Swift.

1 Ответ

2 голосов
/ 11 июня 2019

Прежде всего, ваши примеры устарели. Начиная с Swift 3, первая метка параметра обязательна

fibonacci(n: 7)

и

fibonacciRecursiveNum1(num1: num2, num2: newNum, steps: steps-1)

...

fibonacciRecursiveNum1(num1 : 0, num2: 1, steps: 7)

Во-вторых, максимум итераций Фибоначчи в значении Int64 составляет 91, 92 и выше, превышает 64-битный диапазон и вызывает сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...