给定下列程序,那么执行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);
}
请给出详细的解题过程。

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
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-14

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

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; 
}

结果:

第2个回答  推荐于2016-06-04
#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

本回答被提问者采纳
相似回答