今天的代码就是来作的,好好的for语句不用,跑来用递归实现累加,虽说有点多此一举,但是这为我们学习递归作了一个很好的铺垫。
一、先看看老师的代码吧!
#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
}// Of addTo
/**
* A clear version.
*/
int clearAddTo(int paraN) {
if (paraN <= 0) {
return 0;
} else {
return clearAddTo(paraN - 1) + paraN;
}// Of if
}// Of clearAddTo
/**
* 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();
return 0;
}// Of main
运行结果:
---- 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>
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;
return tempSum;
}// of if
}// of addTo
//以上的addTo为核心代码段,其实思维就是要想完成对n项的累加,就得完成对n-1项的累加
//以下为更简洁的一个版本,直接返回n-1时的值给函数,然后依次累加
int clearAddTo(int paraN) {
if(paraN == 0) {
return 0;
} else {
return clearAddTo(paraN - 1) + paraN;
}// of if
}// of clearAddTo
//对addTo函数的额测试函数
void addToTest() {
int n, sum;
printf("---- addToTest begins. ----\r\n");
n = 5;
sum = addTo(n);
printf("\r\n0 add to %d gets %d", n, sum);
n = 1;
sum = addTo(n);
printf("\r\n0 add to %d gets %d", n, sum);
n = 0;
sum = addTo(n);
printf("\r\n0 add to %d gets %d", n, sum);
n = -1;
sum = addTo(n);
printf("\r\n0 add to %d gets %d", n, sum);
}// of addToTest
int main() {
addToTest();
return 0;
}// of main
运行结果:
---- addToTest begins. ----
Entering addTo(5)
Entering addTo(4)
Entering addTo(3)
Entering addTo(2)
Entering addTo(1)
Entering addTo(0)
return 0
0 add to 5 gets 15Entering addTo(1)
Entering addTo(0)
return 0
0 add to 1 gets 1Entering addTo(0)
return 0
0 add to 0 gets 0Entering addTo(-1)
return 0
0 add to -1 gets 0