递归通过函数本身的重复调用,能够减少代码量,以大化小、
一。累加
#includeint 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; } } //of addTo 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
二,汉诺塔问题
汉诺塔游戏该:游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
(图为转载)
#includevoid 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); } }//of hanoi 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"); } //of hanoiTest int main() { hanoiTest(); return 0; } 这道题出现在大一上的期末考试,被老师成为智商分水岭



