第一讲 递归与循环1

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;
}
    

 

 

=============注===============

部分叙述来自于蓝桥杯讲解视频。

posted @ 2015-12-02 22:48  一支小白  阅读(158)  评论(0编辑  收藏  举报