设有递归算法如下, int x(int n) { if(n<=3) return 1; else return x(n-2)+x(n-4)+1; } 试问计算x(x(8))时需要计算()次x函数。 8 9 16 18
int x(int n) { if(n<=3) return 1; else return x(n-2)+x(n-4)+1; }
答案:B
先计算内部的x(8),x(8)=x(6)+x(4)+1;这里调用了3次
x(6)=x(4)+x(2)+1;这里又调用了两次(x(6)上面已经算了,这里不再计入次数)
x(4)=x(2)+x(0)+1;两次
x(2)直接得到结果,不需要再调用。
由于递归不记录已经计算过的结果,所以表达式x(6)+x(4)+1中的x(4)需要重新计算,需要 两次
3+2+2+2=9次