Python等比数列

文章目录

  • 等比数列
  • 等差数列
  • 斐波那契数列

等比数列

  • 公比用q表示, q ≠ 0 q\ne0 q=0
    n ∈ N ∗ n \in N^* nN
    a 1 ≠ 0 a_1\ne0 a1=0,等比数列中每一项都不等于0
  • 通项公式: a n = a 1 ⋅ q n − 1 a_n=a_1 \cdot q^{n-1} an=a1qn1
  • 等比数列求和:
    S n = n ⋅ a 1 ( q = 1 ) S_n = n \cdot a_1 (q=1) Sn=na1(q=1)
    S n = a 1 ( 1 − q n ) 1 − q ( q ≠ 1 ) S_n = \frac{a_1(1-q^n)}{1-q} (q\ne1) Sn=1qa1(1qn)(q=1)
def conditions(a1, q, n):
    assert a1 != 0
    assert q != 0
    assert isinstance(n, int)
    assert n > 0


def a_n(a1, q, n):
    conditions(a1, q, n)
    return a1 * q ** (n - 1)


def s_n(a1, q, n):
    conditions(a1, q, n)
    if q == 1:
        return n * a1
    else:
        return a1 * (1 - q ** n) / (1 - q)


if __name__ == '__main__':
    print(a_n(1, 2, 10))
    print(s_n(1, 2, 10))

等差数列

  • 公差用d表示
    n ∈ N ∗ n \in N^* nN
  • 通项公式: a n = a 1 + ( n + 1 ) ∗ d a_n = a_1 + (n+1)*d an=a1+(n+1)d
  • 等差数列求和: S n = n ⋅ a 1 + n ( n − 1 ) 2 d S_n = n \cdot a_1 + \frac{n(n-1)}{2}d Sn=na1+2n(n1)d
def a_n(a1, d, n):
    assert isinstance(n, int) and n > 0
    return a1 + (n - 1) * d


def s_n(a1, d, n):
    return (a1 + a_n(a1, d, n)) * n / 2


if __name__ == '__main__':
    print(a_n(1, 1, 10))
    print(s_n(1, 1, 10))

斐波那契数列

  • 从第3项开始,每一项都等于前两项之和:1,1,2,3,5,8,13,21,34…
  • n ∈ N ∗ n \in N^* nN
    a 1 = 1 a 2 = 1 a_1=1 \\ a_2=1 a1=1a2=1
    当 n ≥ 3 时 , a n = a n − 1 + a n − 2 当 n \ge 3 时, a_n=a_{n-1}+a_{n-2} n3,an=an1+an2
def fibonacci(n):
    assert isinstance(n, int) and n > 0
    a = 1
    b = 1
    i = 1
    while i < n:
        a, b = b, a + b
        i += 1
    return a


if __name__ == '__main__':
    for j in range(1, 10):
        print('f(%d)=%d' % (j, fibonacci(j)))

f(1)=1
f(2)=1
f(3)=2
f(4)=3
f(5)=5
f(6)=8
f(7)=13
f(8)=21
f(9)=34

你可能感兴趣的:(数据分析,1024程序员节,python)