所以这就是代码:
int test ( int n)
{
if (n ≤2) return 1;
else return test(n-2) * test(n-2);
}
我对如何推理这种递归函数没有信心。我尝试将N值映射到递归深度,如下所示:
N = 2 -> 0 recursions
N = 4 -> 2
N = 8 -> 14
但说实话,我不确定这会让我在任何地方(只是考虑测试(16)会伤害我的头脑。
答案 0 :(得分:2)
让我们首先写出所做调用总数的递归关系:
让我们先看看n是偶数的情况。然后
除了0的情况之外,看起来这些值采用模式1,3,7,15,31等。请注意,这些值中的每一个都小于2的幂:1 = 2 - 1, 3 = 4 - 1,7 = 8 - 1等我们可以猜测我们所看到的与2的幂有关。
回到我们的序列,我们可能会猜测
因此,如果n是偶数,我们有T(n)= 2 n / 2 - 1 =(√2) n - 1.你可以使用它来形式化通过归纳证明。
对于奇怪的情况,我们基本上得到了相同的东西:
因此,如果n是偶数,那么T(n)= 2 (n-1)/ 2 - 1.再次,你可以通过归纳来证明这一点,如果你做了正式的事情。等。