首页 > 试题广场 >

给定下列程序,那么下面程序的的输出结果是多少?

[单选题]
给定下列程序,那么执行printf("%d\n",foo(20,13)); 的输出结果是多少?
int foo (int x,int y )
{
    if (x<=0││y<=0)
        return 1;
    return 3*foo(x-6,y/2);
}

  • 3
  • 9
  • 27
  • 81
答案D,一种递归思想:
一次:3*foo(14,6)
二次:3*foo(8,3)
三次:3*foo(2,1)
四次:3*foo(-4,0)=3;
依次返回结果为:3*3*3*3=81                              
发表于 2016-08-26 13:51:26 回复(0)
选择答案:D
第一次执行结果:3*foo(14,6)
第二次执行结果:3*3*foo(8,3)
第三次执行结果:3*3*3*foo(2,1)
第四次执行结果:3*3*3*3*foo(-4,0)
第五次执行结果:3*3*3*3*1
最终结果为第五四次执行的结果:81

发表于 2015-10-19 17:40:45 回复(0)
当然是D  因为我点击了一下查看答案  答案是D  所以我很确定的告诉你  D! 就它了
发表于 2016-08-26 22:02:54 回复(3)
出题不严谨;
printf("%\n",foo(20,13));    //输出是%,少了个d
发表于 2019-03-26 10:35:33 回复(0)
选81,可以展开一步一步求出来  
f(x,y) = 1,x<=0,y<=0
f(x,y)=3f(x-6,y/2),其他
编辑于 2016-08-26 19:30:48 回复(0)
对于这种题,如果不熟悉的可以用画二叉树递归去解决
发表于 2015-09-03 12:18:28 回复(0)
我是直接敲代码的,没想到递归。。
发表于 2019-08-20 09:47:39 回复(0)
我只知道我把x减了4次他就不符合了,Y除了4还是5次次不符合。取最小的次数作为3的次方
发表于 2018-12-07 00:26:34 回复(0)
答案 D

foo(20,13) = 3 * foo(14,6) = 9 * foo(8,3) = 27 * foo(2, 1) = 81 * foo(-4, 0) = 81 * 1 = 81

发表于 2018-09-26 10:49:47 回复(0)
return3*,每次都有所以最后是3的次方乘1
发表于 2018-09-04 08:28:56 回复(0)
这题出的有输出吗printf("%\n",foo(20,13));
不过题意肯定是81
编辑于 2018-08-06 12:42:14 回复(0)
发表于 2017-11-08 11:52:13 回复(0)
"%\n" 所以应该输出 %
发表于 2017-10-13 12:10:15 回复(1)
D,递归思想
发表于 2016-08-27 22:04:56 回复(0)
D
发表于 2016-08-26 09:11:07 回复(1)
81
发表于 2015-02-05 17:21:54 回复(1)