1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
/* * @Author: SHUAI * @Date: 2015-12-02 21:13:30 */ /* 理论上,任何循环都可以重写为递归形式 有时候,为栈限制,需要‘尾递归‘ java不支持尾递归 有些语言没有循环语句,只能使用递归(Lisp等) 改为递归的关键是发现逻辑"相似性" 不要忘记递归"出口" */ #include <stdio.h> void funa( int n) { if (n > 0) funa(n - 1); printf ( "%d\n" , n); } void funb( int n) { printf ( "%d\n" , n); if (n > 0) funb(n - 1); } int main() { funa(10); printf ( "\n" ); funb(10); return 0; } /*笔记==================== funa()先调用自身,所以显示10先入栈,逐次9,8,7,...1 然后出口,不在递归调用,逐个出栈。 funa()和funb()的顺序 递归调用逐个插入在什么位置。 funa()就是从10到1,从下往上 funb()就是从1到10,从上往下 */ |
原文:http://www.cnblogs.com/startnow/p/5014603.html