加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 3中的Fibonacci数字生成器

发布时间:2020-12-14 05:43:12 所属栏目:百科 来源:网络整理
导读:下面的Q A介绍了一些在Swift中生成Fibonacci数的方法,但它已经过时了(Swift 1.2?): Sum of Fibonacci term using Functional Swift 问题:我们如何使用现代Swift(Swift = 3)整齐地生成斐波纳契数?优选地,避免显式递归的方法. Swift 3.0的另一种选择是使用
下面的Q& A介绍了一些在Swift中生成Fibonacci数的方法,但它已经过时了(Swift 1.2?):

> Sum of Fibonacci term using Functional Swift

问题:我们如何使用现代Swift(Swift> = 3)整齐地生成斐波纳契数?优选地,避免显式递归的方法.

Swift 3.0的另一种选择是使用辅助函数
public func sequence<T>(first: T,while condition: @escaping (T)-> Bool,next: @escaping (T) -> T) -> UnfoldSequence<T,T> {
    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)
}

从Express for loops in swift with dynamic range:

for f in sequence(first: (0,1),while: { $1 <= 50 },next: { ($1,$0 + $1)}) {
    print(f.1)
}
// 1 1 2 3 5 8 13 21 34

请注意,为了在结果序列中包含零,它
足以用(1,0)替换初始值(0,1):

for f in sequence(first: (1,0),$0 + $1)}) {
    print(f.1)
}
// 0 1 1 2 3 5 8 13 21 34

这使得“人为”检查

if pair.1 == 0 { pair.1 = 1; return 0 }

多余的.根本原因是Fibonacci数字可以
推广到负指数(https://en.wikipedia.org/wiki/Generalizations_of_Fibonacci_numbers):

... -8,5,-3,2,-1,1,3,8,...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读