累加的递归实现
#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 aadTo
/*
*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();
}//of main
其运行结果
构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
汉诺塔
#include<stdio.h>
/*
*hanoi
*/
void hanoi(int paraN,char paraSource,char paraDestination,char paraTransit){
if(paraN<=0){
return;
}
else{
hanoi(paraN-1,paraSource,paraTransit,paraDestination);
printf("%c->%c\r\n",paraSource,paraDestination);
hanoi(paraN-1,paraTransit,paraDestination,paraSource);
}//of if
}//of hanoi
/*
*test the hanoi funtion
*/
void hanoiTest(){
printf("----addToTest begins.----\r\n");
printf("2 plates\r\n");
hanoi(2,'A','B','C');
printf("3 plates\r\n");
hanoi(3,'A','B','C');
printf("----addToTest ends.----\r\n");
}//of addtotest
/*
*the entrance
*/
int main()
{
hanoiTest();
}//of main
其运行结果
汉诺塔是来源于印度的一种古老的益智游戏。它总共有三根柱子,分别为A,B,C。初始状态下,A柱中有N个盘子,这N个盘子有大有小,大的在下面,小的在上面。游戏的最终目标就是将A柱上的所有盘子移到C柱上,中间可以经过B柱,过程中必须保持大盘在下面,小盘在上面。