1.代码如下
#include <stdio.h>
/**
* resursive addition
*/
int AddTo(int paraN)
{
int tempSum;
printf("entering addTo(%d)\r\n",paraN);
if(paraN<=0)
{
printf(" return 0\r\n");
return 0;
}
else
{
tempSum=AddTo(paraN-1)+paraN;
printf(" return %d\r\n",tempSum);
return tempSum;
}
}
/**
* clear AddTo function
*/
int clearAddTo(int paraN)
{
if(paraN<=0)
{
return 0;
}
else
{
return clearAddTo(paraN-1)+paraN;
}
}
/**
* test the function
*/
void AddToTest()
{
int n,sum;
printf("---- addToTest begins. ----\r\n");
n=5;
sum=AddTo(n);
printf("\r\n0 adds to %d gets %d.\r\n",n,sum);
n=1;
sum=AddTo(n);
printf("\r\n0 adds to %d gets %d.\r\n",n,sum);
n=-1;
sum=AddTo(n);
printf("\r\n0 adds to %d gets %d.\r\n",n,sum);
printf("---- addToTest ends. ----\r\n");
}
void main()
{
AddToTest();
}
2.图示
3.代码说明
1)递归其实是一个栈,将每一个函数先压栈,再进行出栈
2)该递归的时间复杂度为O(n),空间复杂度为O(n)
4.运行结果
---- addToTest begins. ----
entering addTo(5)
entering addTo(4)
entering addTo(3)
entering addTo(2)
entering addTo(1)
entering addTo(0)
return 0
return 1
return 3
return 6
return 10
return 15
0 adds to 5 gets 15.
entering addTo(1)
entering addTo(0)
return 0
return 1
0 adds to 1 gets 1.
entering addTo(-1)
return 0
0 adds to -1 gets 0.
---- addToTest ends. ----
--------------------------------
Process exited after 0.05063 seconds with return value 0
请按任意键继续. . .