递归就好比套娃,在满足条件的情况下会一直调用本身,当然递归肯定有一个判断条件去进行退出,想起了玩过的剧本杀校规2中的套娃,一个一个的轮回。
递归满足三个条件:
-
递归必须又一个可以明确终止的条件,成为递归出口或者递归边界
-
该函数所处理的数据规模必须在递减,新转化的解法与原问题的相同或者类同
-
这个转化必须是可解的
#include
int addTo(int paraN) {
int tempSum;
printf("entering addTo(%d)rn", paraN);
if (paraN <= 0) {
printf(" return 0rn");
return 0;
} else {
tempSum = addTo(paraN - 1) + paraN;
printf(" return %drn", tempSum);
return tempSum;
}
}
void addToTest() {
int n, sum;
printf("---- addToTest begins. ----rn");
n = 5;
sum = addTo(n);
printf("rn0 adds to %d gets %d.rn", n, sum);
n = 1;
sum = addTo(n);
printf("rn0 adds to %d gets %d.rn", n, sum);
n = -1;
sum = addTo(n);
printf("rn0 adds to %d gets %d.rn", n, sum);
printf("---- addToTest ends. ----rn");
}// Of addToTest
int main() {
addToTest();
}// Of main
#include
void hanoi(int paraN, char paraSource, char paraDestination, char paraTransit) {
if (paraN <= 0) {
return;
} else {
hanoi(paraN - 1, paraSource, paraTransit, paraDestination);
printf("%c -> %c rn", paraSource, paraDestination);
hanoi(paraN - 1, paraTransit, paraDestination, paraSource);
}
}
void hanoiTest() {
printf("---- addToTest begins. ----rn");
printf("2 platesrn");
hanoi(2, 'A', 'C', 'B');
printf("3 platesrn");
hanoi(3, 'A', 'C', 'B');
printf("---- addToTest ends. ----rn");
}
int main() {
hanoiTest();
return 0;
}



