1.输入数字
int addTo(int paraN) {
int tempSum;
printf("entering addTo(%d)\r\n",paraN);
if(paraN<=0){
printf(" 请你输入正确的数字\r\n");
return 0;
} else{
tempSum = addTo(paraN -1)+paraN;
printf(" return %d\r\n",tempSum);
return tempSum;
} // Of if
}// Of addTo
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");
}// Of addToTest
/**
The entrance.
*/
int main() {
addToTest();
}// Of main
3.完整代码
#include <stdio.h>
/**
* Recursive addition.
*/
int addTo(int paraN) {
int tempSum;
printf("entering addTo(%d)\r\n",paraN);
if(paraN<=0){
printf(" 请你输入正确的数字\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();
}// Of main
解题思想:
(1)以c柱为中介,先将n-1个圆盘按规则从a柱移动到b柱上;
(2)将最底层的圆盘移动到c柱上;
(3)以a柱为中介,将b柱上的n-1个圆盘按规则移动到c柱上。
#include <stdio.h>
void main()
{
void move(char, char);//移动盘子
void TowerOfHanoi(int, char, char, char);//汉诺塔函数
int n;
char t1 = 'a', t2 = 'b', t3 = 'c';
printf("input the number of plates:");
scanf("%d", &n);
printf("the results are as follows:\n");
TowerOfHanoi(n, t1, t2, t3);
}
void TowerOfHanoi(int m, char t1, char t2, char t3)
{
//圆盘数目m,圆柱 t1,t2,t3
void move(char x, char y);
if(m == 1)
move(t1, t3);
else
{
TowerOfHanoi(m-1, t1, t3, t2);//将m-1个圆盘从t1移动到t2
move(t1, t3);//将最底层的圆盘移动到t3
TowerOfHanoi(m-1, t2, t1, t3); //将m-1个圆盘从t2移动到t3
}
}
void move(char x, char y)
{
printf("%c-->%c\n", x, y);
}