每一步都要保证T <= 3n的要求,实际上是针对最终结果A4的,即A4的条件中可以加上T <= 3n,之前的中间步骤需要有更严格的限制,为后面的步骤留出余量。
从中间的某一步骤看,后面还剩多少步骤呢?这是由d决定的。d是前一次递归的余数,本次递归的除数,它是在不断减小的。
剩余步骤数 = 本次递归剩余步骤数 + 余下的递归次数 * 一次递归中的步骤数
一次递归,从步骤E4开始,经E2,到E3,要么结束,要么开始下次递归。所以在A5处,本次剩余步骤数是0,A6处是2,A3处是1。
余下的递归次数是d - 1,每次递归3个步骤。
剩余步骤数 = 0/2/1 + 3(d - 1)
综上,当前的T不能大于:3n - 0/2/1 - 3(d - 1) = 3(n - d) + 3/1/2 (A5/A6/A3)
不需要为递归开始前执行的步骤数调整限制,如果不满足上式,说明无法保证任何情况下都在3n个步骤内结束。
考虑第一次执行E2后r = 0的情况,恰好也满足了上式。