|
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到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\n", begin);
if (begin < end) fun(begin + 1, end);
}int main(void) {
fun(2, 6);
return 0;
} |
=============注===============
部分叙述来自于蓝桥杯讲解视频。