递归定义:
若一个函数、过程或者数据结构定义内部又直接(或间接)出现定义本身的应用,称他们为递归。
利用递归实现累加:
图解:
代码:
#include <stdio.h>
/**
* Recursive addition.
*/
int addTo(int paraN){//理解每次出栈的过程
int tempSum;
printf("entering addTo (%d).\n", paraN);
if (paraN <= 0) {
printf("return 0.\n");
return 0;
} else {
tempSum = addTo(paraN - 1) + paraN;
printf(" return %d.\n", tempSum);
return tempSum;
}//Of if
} //Of addTo
/**
* A clear version.
*/
int clearAddTo(int paraN){//空间复杂度O(n), 时间复杂度O(n)
int tempSum;
if (paraN <= 0) {
return 0;
} else {
tempSum = addTo(paraN - 1) + paraN;
return tempSum;
}//Of if
} //Of addTo
/**
* Test the addTo function.
*/
void addToTest() {
int n, sum;
printf("--- addToTest begins. ---\r\n");
n = 5;
sum = addTo(n);
printf("0 add to %d gest %d.\n", n, sum);
n = 1;
sum = addTo(n);
printf("0 add to %d gest %d.\n", n, sum);
n = -1;
sum = addTo(n);
printf("0 add to %d gest %d.\n", n, sum);
}//Of addToTest
int main(void){
addToTest();
return 0;
}
结果:
--- 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 add to 5 gest 15.
entering addTo (1).
entering addTo (0).
return 0.
return 1.
0 add to 1 gest 1.
entering addTo (-1).
return 0.
0 add to -1 gest 0.
总结:
递归函数特点:
1.函数本身包含自己
2.一定有一个结束条件句 如:上面的
if (paraN <= 0) {
printf("return 0.\n");
return 0;
}