为了账号安全,请及时绑定邮箱和手机立即绑定

请慕友帮忙给出详细的解题过程。

请慕友帮忙给出详细的解题过程。

慕斯王 2023-01-03 17:12:28

给定下列程序,那么执行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 回答

?
梵蒂冈之花

TA贡献1618条经验 获得超5个赞

1、if(x<=0||y<=0)不满足,所以return 3*foo(x-6,y/2)即3*foo(20-6,13/2)-----3*foo(14,6);
2、再看foo(14,6), if(x<=0||y<=0)还不满足,return 3*3*foo(14-6,6/2)即3*3*foo(8,3);
3、再看foo(8,3), if(x<=0||y<=0)还不满足,return 3*3*3*foo(8-6,3/2)即3*3*3*foo(2,1);
4、再看foo(2,1), if(x<=0||y<=0)还不满足,return 3*3*3*3*foo(2-6,1/2)即3*3*3*3*foo(-4,0);
5、此时if(x<=0||y<=0)终于满足,即foo(-4,0)return 1,加上前面几步的迭代最终结果是3*3*3*3*1=81

查看完整回答
反对 回复 2023-01-06
?
侃侃尔雅

TA贡献1553条经验 获得超15个赞

最好的办法,写程序,交给电脑去执行:


int foo(int x,int y){    printf("x: %d, y: %d\n", x, y);         if (x<=0||y<=0)        return 1;    return 3*foo(x-6,y/2);}int main(){    printf("%d\n",foo(20,13));    return 0; }

结果:

 


查看完整回答
反对 回复 2023-01-06
?
SMILET

TA贡献1521条经验 获得超4个赞

#include <stdio.h>int foo(int x,int y){if(x<=0||y<=0) return 1;//这是个递归函数  返回1是函数的出口return 3*foo(x-6,y/2);}int main(){    printf("%d\n",foo(20,13));    return 0; }//  x       y//  14     6//  8       3//  2       1//  -4      0   这是递归过程(4次)//然后回溯(也要4次)  3*3*3*3=81  所以结果就是81

查看完整回答
反对 回复 2023-01-06

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信