一种确定递归方程的方法? (一般的做法)

时间:2013-03-18 21:42:06

标签: algorithm recursion recurrence

我正处于学习数据结构类递归的第一阶段,我们的教授告诉我们,我们应该能够采用递归方法,并能够提出问题大小和递归方程。当问题大小取决于一个变量N时,我能够写出一个递推方程,为了简单起见,假设这是一个正数,例如:只要n> 1,该方法就会打印输入数字。第一次通话时为0。

public static int simpleCounter(int N) {
    if (n == 0) {
        return;
    }
    else {
        return 1 + simpleCounter(N - 1);
    }
 }

然而,当问题规模更复杂时,例如取决于2个变量,我无法创建递归方程,因为我不知道如何处理变量。此方法计算可以相互减去2个数字的次数,假设第一次调用的计数总是为零,而a和b都是正数。

public static int complexCount(int a, int b, int count) {
    if ((a - b) <= 0) { 
        return 0; 
    }
    else {
      count = 1 + complexCount((a - b), b, count + 1)
      return count;
     }
 }

那么这里的问题大小是多少?是不是与a和b都有关系? 在不知道问题大小的情况下,我无法得出递归方程: 基数:T(0)= 1 复发:T(N)= 1 +Δθ

1 个答案:

答案 0 :(得分:0)

递归关系并不总是需要涉及单个变量,事实上,在多个变量中存在递归关系是很常见的。这里,递归关系是

  

T(a,b)= 1 + T(a - b,b)(如果a≥b)

     

T(a,b)= 1(否则)

然后,您可以根据a和b来解决此递归关系,以获得最终解决方案。

希望这有帮助!