创建简单递归函数的递推方程

时间:2014-12-16 22:32:04

标签: java runtime computer-science pseudocode recurrence

如果给出了以下递归函数,我将如何为它创建递推方程?

QUIBBLE(n) {
   if n = 0 return 1; 
   else     return QUIBBLE(n-1) + QUIBBLE(n-1); 
}

我在想它会是:

T(n):  2T(n-1) + 1 when n is >= 1
T(n) = 1 when n is 0, 

2 个答案:

答案 0 :(得分:1)

通常,良好的启动方法是为某些样本输入写出重复树。

假设n = 3

/* 1 call */   QUIBBLE(3)            
/* 2 calls */  = QUIBBLE(2) + QUIBBLE(2)
/* 4 calls */  = QUIBBLE(1) + QUIBBLE(1) + QUIBBLE(1) + QUIBBLE(1)
/* 8 calls */  = QUIBBLE(0) + QUIBBLE(0) + QUIBBLE(0) + QUIBBLE(0) + QUIBBLE(0) + QUIBBLE(0) + QUIBBLE(0) + QUIBBLE(0)
               = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
               = 8

通过查看上面的树,我们可以看到,每次调用函数时,树都会分成两个分支。

这也向我们展示了QUIBBLE函数明显呈指数并返回2 ^ n

现在,您的解决方案几乎是正确的。

+ 1时,您不需要的一件事就是等式的n >= 1部分。

T(n):  2T(n-1) + 1 when n is >= 1
//               ^
//                you don't need this

这是一个简单的检查,以了解原因。什么是T(1)

根据您的等式,答案是:

T(1) = T(0) + T(0) + 1 = 1 + 1 + 1 = 3

但是,2 ^ 1 == 2,而不是3

因此,答案应该是

T(n):  2T(n-1) when n is >= 1
T(n):  1 when n is 0

答案 1 :(得分:0)

0 =→1 1 =→2 2 =→4 3 => 8 4 => 16

你知道模式吗?

QUIBBLE(n)= Math.pow(2,n)

实际上,递推方程是QUIBLE(n)= 2 * QUIBLE(n-1),种子为QUIBLE(0)= 1