Java 一个简单递归函数递推方程的建立
如果给我以下递归函数,我将如何为它创建一个递归方程Java 一个简单递归函数递推方程的建立,java,runtime,computer-science,pseudocode,recurrence,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, 0=>1 1=>2 2=>4 3=>8 4=>16 你看到图案了吗 诡辩(n)=数学能力(2,n) 事实上,递推方程是QUIBLE(n)
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,
0=>1
1=>2
2=>4
3=>8
4=>16
你看到图案了吗
诡辩(n)=数学能力(2,n)
事实上,递推方程是QUIBLE(n)=2*QUIBLE(n-1),其种子为QUIBLE(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
现在,您的解决方案几乎是正确的
当n>=1
时,你不需要的是等式的+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