如何确定一个函数的周期

1 投票
1 回答
5557 浏览
提问于 2025-04-11 20:52

假设我有一个函数A,它可以对一个给定的矩阵应用某种规则,从而生成另一个矩阵,我把这个新矩阵称为原始矩阵的下一个状态。这个函数还可以通过给定的次数N来确定矩阵的最终状态(也就是说,先对原始矩阵应用规则,然后对下一个状态再应用规则,依此类推,总共应用N次)。

比如说,对于一个给定的矩阵,如果对它应用规则5次后,最终的矩阵和原始矩阵是一样的,我们就说这个矩阵的周期是5。

我还有一个函数B,我想知道如何让函数B能够在同样的规则下,确定函数A的周期,并返回这个周期。我现在完全不知道该从哪里开始做这个...提前谢谢大家。

def functionA(origin_matrix,N_times):
   #apply rule on the origin_matrix to generate another matrix which is the next sate of it.
   #apply rule on origin_matrix for N_times
   return the_final_matrix

def functionB(origin_matrix):
   #determine the period of the the origin_matrix.
   return period

1 个回答

6

可以使用一个for循环,或者用一个while循环配合一个临时结果和一个计数器。后者的方法通常更高效。

简单版本,用伪代码表示:

iterations = 0;
tmp = origin_matrix;

do
    tmp = operation(tmp);
    iterations += 1;
while tmp != origin_matrix;

return iterations;

补充说明:你也可以使用一个简单的while结构:

while True:
    tmp = operation(tmp)
    iterations += 1

    if tmp == origin_matrix:
        break  # Or you could return here.

补充说明:那是针对functionB的。我不知道它们是两个不同的问题。对于那个例子,operation(x) = functionA(x, 1)。

对于functionA,你很可能会使用一个for循环。伪代码如下:

matrix = origin_matrix

for i in range(N_times):
    matrix = operation(matrix)

return matrix

撰写回答