八、递归 ( recursion)

递归 ( recursion)


C ( recursive call ) 在函 递归 使 每次 return 使

l        l        递归函数之特性

1.      (1)    return 述,问题范围缩小

2.      (2)    具有一个终止递归之条件

程序实例: 递归

int   factorial(int j)

 {
         if(n==1)
            return(1);
         else
            return(n*factorial(n-1));
      }


   void main(void)
       {
          int i;
          for (i=0; i< 5; i++)
             printf("%d! = %d/n", i , factorial(i));
       }
       

   result :
               1! is 1
               2! is 2
               3! is 6
               4! is 24

l        l        递归函数之内部处理

1.      1.      一般函数之呼叫

2.      2.      递归函数之呼叫

01

* =================================================== */
          
          

02

/*    程序实例:使用打印数组函数说明递归函数之呼叫     */
          
          

03

/* ================================================== */
          
          

04

 

05

int list[6] = { 1, 2, 3, 4, 5, 6 };                /* 数组内容    */

06

 

07

/* ----------------------------------------------------------------------------------- */

08

/*               递归数组反向打印函数                        */

09

/* ----------------------------------------------------------------------------------- */

10

void invert_array(int j)

11

{

12

if ( j < 6 )                     /* 终止条件     */

13

      {    /* 递归串行打印函数呼叫 */

14

                 invert_array(j + 1);

15

          printf("[%d]",list[j]);       /* 打印元素数据 */

16

             }

17

}

18

/* ----------------------------------------------------------------------------------- */

19

/*               主程序: 反向打印数组内容.                    */

20

/* ----------------------------------------------------------------------------------- */

21

void main()

22

{

23

  int i;

24

 

25

printf("数组的内容:/n");

26

  for ( i= 0;  i < 6 ; i++)

27

        printf("[%d]",list[i]);         /* 打印元素数据 */

28

   printf("/n");                       /* 换行         */

29

   printf("递归打印数组的内容:/n");

30

   invert_array(0);                 /* 呼叫打印函数 */

31

  printf("/n");                    /* 换行        */

32

}

 

    程序实例:  费博尼西数列

 long  fib(int n)

{

 if (n <=2)

     return (1);

   return (fib( n-2) + fib(n-1));

}

 

Fib函数执行计算过程

 


回数据结构教学大纲 下一单元

 

 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值