一、递归定义
递归定义是数理逻辑和计算机科学用到的一种定义方式,使用被定义对象的自身来为其下定义(简单说就是自我复制的定义)。递归定义亦称归纳定义,一种实质定义,指用递归的方法给一个概念下的定义。
递归图解:
二、代码功能
1、递归函数
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;
}// Of if
}
2、递归函数的测试
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");
}
3、函数入口
int main()
{
addToTest();
}
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. ----
三、整体代码
#include <stdio.h>
/**
* Recursive 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;
}// Of if
}
/**
* Test the addTo 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");
}// Of addToTest
/**
The entrance.
*/
int main()
{
addToTest();
}
总结:本代码核心就是递归函数,主要就是要理解到a(n)= a(n-1)+n就懂递归的意思了,是对函数的反向推导,把a(n)= a(n-1)+n改成a(n)= a(n-1)*n就变累加为阶乘。