首页 > 试题广场 >

递归算法x(x(8))需要调用几次函数x(int n)?

[单选题]
class program
 {
     static void Main(string[] args)
     {
         int i;
         i = x(x(8));
     }
     static int x(int n)
     {
         if (n <= 3)
             return 1;
         else
             return x(n - 2) + x(n - 4) + 1;
     }
 }
递归算法x(x(8))需要调用几次函数x(int n)?
  • 9
  • 12
  • 18
  • 24
选C: 18次

根据题意,易得x(3) = x(2) = x(1) = x(0) = 1
x(8) = x(6) +x(4) +1
       = x(4) + x(2) +1 + x(2) + x(0) +1 + 1
        = x(2) + x(0) +1 + 1 + 1 +1 + 1 +1 + 1
       = 9
x(8)  这个就调用了9次函数x(int n)
同理可得x(9)也是调用了9次函数x(int n)
所以总共18次。
发表于 2016-07-27 09:07:22 回复(3)
x(8)                                          1次
x(6)+x(4)+1                                   2次
x(4)+x(2)+1+x(2)+x(0)+1+1                      4次
x(2)+x(0)+1+1+1+1+1+1+1=8                    2次
编辑于 2018-10-08 09:37:37 回复(0)
这道题的有趣之处在于x(n)=m,则x(n)就调用了m次递归,所以这道题就是x(8)+x(x(8))=x(8)+x(9)
发表于 2020-01-07 17:44:07 回复(1)
x(8)需要9次
发表于 2015-05-17 15:56:13 回复(0)
C

发表于 2015-01-29 10:25:05 回复(11)
容易漏掉: return x(n-2)+ x(n-4) + 1 . 中的 +1 
发表于 2016-08-03 17:02:25 回复(3)
发表于 2021-09-08 22:46:27 回复(0)
一步步分解不难 容易落下x(2) x(0)这两次 操作
发表于 2021-07-16 14:46:19 回复(0)
 
加上x(8)自己调用的一次
发表于 2021-01-12 15:49:32 回复(0)
假设x(m)=n,因为递归边界是return 1,所以可以看做n=1+1+1+...,其中的每个1都等价于调用了一次边界函数。所以x(m)会调用n次函数,那么x(8)=9,调用9次,而x(9)=9,同样调用9次,一共18次。
发表于 2020-12-24 11:24:14 回复(0)
X(8)的返回值就是调用次数,
参数:012345678
输出:111133559
2*9=18
发表于 2019-12-25 11:13:53 回复(0)

注意x≤3时return1不是x。如果是x,粗略计算大概是24...

发表于 2019-04-29 00:56:03 回复(0)
注意问题,求调用递归次数
发表于 2018-12-12 15:18:20 回复(0)
为什么不直接问xx(8)的值呢,我看这里是问的次数呀,调用次数和这个xx8值一样么,晕晕的
发表于 2018-08-18 16:54:10 回复(0)
发表于 2017-10-28 14:19:49 回复(1)
画个树状图就出来了,调用了18次
发表于 2017-09-07 10:22:29 回复(0)
函数是静态的,求出来的结果不是会保留下来吗,那就不会重复调用中间结果吧。应该是9呀
发表于 2015-11-28 14:23:02 回复(0)
为什么x(8)=9啊,是五次调用x<=3产生的五个1加上4次调用else产生的四个1么?
发表于 2015-06-29 09:42:33 回复(1)
C
发表于 2015-05-15 11:09:34 回复(0)
C
发表于 2015-01-04 11:31:17 回复(2)