思路与代码
思路其实很简单,我们已知斐波那契数列是给定两个边界条件(初始值),然后按照F(n+1)=F(n)+F(n-1)的方式递推得到,那么我可以从先给定0,1的初始条件,然后开始逐轮试探,每一轮我们先判断F(n)*F(n+1)<prod是否成立,只要成立,就更新当前的F(n)和F(n+1),并继续下一轮,这样的逐轮尝试进行到F(n)*F(n+1)≥prod为止,然后返回此时的F(n)、F(n+1)以及F(n)*F(n+1)==prod的bool值。
代码如下:
# -*- coding: utf-8 -*-
"""
codewars Kata: Product of consecutive Fib numbers
Created on Tue Nov 24 16:53:05 2020
@author: Pray
"""
def productFib(prod):
a = 0
b = 1
while (a*b < prod):
c = a
a = b
b = c + b
return [a, b, prod == a*b]
提交代码后我看到了网上其他大神的解决方法,我发现代码可以进一步优化变得更为简洁,主要是可以在F(n)和F(n+1)更新那一步简化代码写法,改写为:
[a, b]=[b, a + b]
这样改写代码效果是一样的,但是整体代码书写会更为简洁