c语言中的题目

来源:百度知道 编辑:UC知道 时间:2024/05/28 16:28:45
main()
{int i=5;
printf("%d\n",sub(i))
}
sub(int n)
{int a;
if(n==1)a=1;
else a=n+sub(n-1);
return(a):
}
结果是1,对吗?

递归调用过程:
先递推
a=5+sub(4) //into stack
a=4+sub(3)//into stack
a=3+sub(2) //into stack
a=2+sub(1)//into stack
a=1
开始回推
a=2+1 //outto stack
a=3+2+1//outto stack
a=4+3+2+1 //outto stack
a=5+4+3+2+1//outto stack
完成递归过程
结果为 15
明白了么?

不是的,结果应该是5+4+3+2+1=15,因为当n!=1的时候执行的是:
a=n+sub(n-1);

不对呀,这是简单的递归调用问题,看看就明白了!