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); } void funb( int n) { printf ( "%d
" , n); if (n > 0) funb(n - 1); } int main() { funa(10); printf ( "
" ); funb(10); return 0; } /*笔记==================== funa()先调用自身,所以显示10先入栈,逐次9,8,7,...1 然后出口,不在递归调用,逐个出栈。 funa()和funb()的顺序 递归调用逐个插入在什么位置。 funa()就是从10到0,从下往上 funb()就是从10到0,从上往下 */ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* * @Author: SHUAI * @Date: 2015-12-03 17:13:08 */ #include <stdio.h> void fun( int begin, int end) { printf ( "%d
" , begin); if (begin < end) fun(begin + 1, end); } int main( void ) { fun(2, 6); return 0; } |
=============注===============
部分叙述来自于蓝桥杯讲解视频。