如何使用递归算法获得第n个偶数三角形数

问题描述 投票:0回答:1

我知道有一个 n 个偶数三角形的公式,但尝试编写一个递归算法只是我感兴趣的问题。

def even_triangle(n):
    value = n * (n + 1) // 2
    if value % 2 == 0:
        return value
    return even_triangle(n + 1)

for i in range(1, 12):
    print(f"{i})", even_triangle(i))

我尝试编写一个可以计算第n个偶数三角形数的函数(OEIS A014494),但事实证明,如果第n个三角形数是奇数,则它返回先前的结果,而不是下一个偶数三角形数量符合预期。

输出:

1) 6  
2) 6  
3) 6  
4) 10 
5) 28 
6) 28 
7) 28 
8) 36 
9) 66 
10) 66
11) 66

我的期望:

1) 6
2) 10
3) 28
4) 36
5) 66
6) 78
7) 120
8) 136
9) 190
10) 210
11) 276
python recursion sequence pascals-triangle oeis
1个回答
0
投票

您可以从以下事实开始:

n * (n + 1) // 2
是偶数,当且仅当 n 或 (n + 1) 能被 4 整除。因此,您要插入三角形数字生成器的数字是 0、3、4、7, 8、11、12 等

所以你可以写:

def even_triangular(n):
    m = 2 * n if n % 2 == 0 else 2 * n + 1
    return m * (m + 1) // 2
[even_triangular(i) for i in range(10)]
[0, 6, 10, 28, 36, 66, 78, 120, 136, 190]
© www.soinside.com 2019 - 2024. All rights reserved.