一个简单的递归函数不知道错在哪?(在线等)

来源:百度知道 编辑:UC知道 时间:2024/06/19 15:33:40
int g(int m,int n)
{int c;
if(m==0&&n>=0)
return 0;
else if(m>0&&n>=0)
return g(m-1,2n)+2;
}

#include"stdio.h"
main()
{int m=5,n=2,c;
c=g(m,n);
printf("%d",c);
getch();
}

return g(m-1,2n)+2;
2n改成2*n

答得太冲忙了,想错了
int g(int m,int n)
{int c;
if(m==0&&n>=0)
return 0;
else if(m>0&&n>=0)
g(m-1,2n)+2;
}

#include"stdio.h"
int g(int m,int n)
{
int c;
if(m==0 && n>=0)
return 0;
else if(m>0 && n>=0)
return (g(m-1,2*n)+2);
}
void main()
{
int m=5,n=2,c;
c=g(m,n);
printf("%d",c);
getchar();
}
结果为10

不是吧
你这是一个无穷递归函数 它是不会终止的
它只会一直的执行下去
原因很简单 你虽然给了限制条件 可你的n是永远不会等于零的 那样它就等于没了结束条件 这种程序是没用的
我的建议是:你把2*n改了 让它有可能成为零
或者你就给它一个很大的值 让它有可能变成你给的结束条件