Как напечатать последовательность Фибоначчи в Swift Playground с помощью рекурсии - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь использовать рекурсию в Swift, чтобы распечатать последовательность Фибоначчи для числа «n» итераций.Тем не менее, я продолжаю получать ту же ошибку.

Я уже пытался сделать это без рекурсии и смог сделать это.Тем не менее, сейчас я пытаюсь сделать это более сложным и «компьютерным» способом, используя рекурсию.

func fibonacciSequence (n: Int) -> [Int]  {

// Consumes a number "n", which is the number of iterations to go through with the Fibonacci formula and prints such sequence.

    var fibonacciArray = [Int]()

    for n in 0 ... n {

        if n == 0 {
            fibonacciArray.append(0)
        }
        else if n == 1 {
            fibonacciArray.append(1)
        }
        else {
            fibonacciArray.append (fibonacciSequence(n: (n - 1)) +
            fibonacciSequence(n: (n-2)))
        }
    }
    return fibonacciArray

Я ожидаю вызвать функцию с номером n и функцию распечатать Фибоначчипоследовательность.Пример: если n = 5, я ожидаю, что консоль напечатает 0, 1, 1, 2, 3, 5. Я получаю следующую ошибку: (Невозможно преобразовать значение типа '[Int]' в ожидаемый тип аргумента 'Int')).

1 Ответ

0 голосов
/ 26 июня 2019

Как указано выше, возвращаемое значение вызывает ошибку при суммировании. Возможный способ (но не рекурсивный) исправления кода состоит в простом изменении оператора else:

func fibonacciSequence (n: Int) -> [Int]  {

    // Consumes a number "n", which is the number of iterations to go through with the Fibonacci formula and prints such sequence.

    var fibonacciArray = [Int]()

    for n in 0 ... n {

        if n == 0 {
            fibonacciArray.append(0)
        }
        else if n == 1 {
            fibonacciArray.append(1)
        }
        else {
            fibonacciArray.append (fibonacciArray[n-1] + fibonacciArray[n-2] )
        }
    }
    return fibonacciArray
}

Рекурсивное решение будет следующим:


func fibonacciSequence (n: Int, sumOne: Int, sumTwo: Int, counter: Int, start: Bool) {

    if start {
        print(0)
        print(1)
    }
    if counter == -1 {
        print(1)
    }
    if (counter == n - 2) {
        return
    }
    let sum = sumOne + sumTwo
    print(sum)

    fibonacciSequence(n: n, sumOne: sumTwo , sumTwo: sum, counter: counter + 1, start: false)
}

fibonacciSequence(n: 8, sumOne: 0, sumTwo: 1, counter: 0, start: true)

Возможно, есть "более хороший" способ, но я надеюсь, что это поможет. Приветствия.

...