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

给定下列程序,那么执行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);
}

慕斯王
浏览 108回答 3
3回答

梵蒂冈之花

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

侃侃尔雅

最好的办法,写程序,交给电脑去执行:int&nbsp;foo(int&nbsp;x,int&nbsp;y){&nbsp;&nbsp;&nbsp;&nbsp;printf("x:&nbsp;%d,&nbsp;y:&nbsp;%d\n",&nbsp;x,&nbsp;y);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(x<=0||y<=0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;3*foo(x-6,y/2);}int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",foo(20,13));&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;}结果:&nbsp;

SMILET

#include&nbsp;<stdio.h>int&nbsp;foo(int&nbsp;x,int&nbsp;y){if(x<=0||y<=0)&nbsp;return&nbsp;1;//这是个递归函数&nbsp;&nbsp;返回1是函数的出口return&nbsp;3*foo(x-6,y/2);}int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",foo(20,13));&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;}//&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y//&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6//&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3//&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1//&nbsp;&nbsp;-4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;这是递归过程(4次)//然后回溯(也要4次)&nbsp;&nbsp;3*3*3*3=81&nbsp;&nbsp;所以结果就是81
打开App,查看更多内容
随时随地看视频慕课网APP