我知道有一个 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
您可以从以下事实开始:
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]