33 函数递归调用

1,一个函数在函数体内又调用了本身,称为递归调用

2,

  若传入4

  打印结果:n=2  n=3  n=4

  分析:

  

   若改为:

  

   打印结果为:

    n=2

3,①执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)

  ②函数的局部变量是独立的,不会相互影响

  ③递归必须向退出递归的条件逼近,否则就是无限递归,死归了

  ④当一个函数执行完毕,或者遇到 return 就会返回,遵守谁调用就将结果返回谁。

4,练习1,斐波那契数

  请使用递归的方式,求出斐波那契数 1,1,2,3,5,8,13,,,,,

  给你一个整数,求出它的斐波那契数是多少

  

5,练习2:求函数值:

  已知 f (1) = 3 ,  f (n ) = 2 *  f (n -1 ) +1

  给你一个整数 n ,求出 f (n)

  

6,练习3,猴子吃桃问题

  有一堆猴子,猴子第一天吃了其中的一半,并再多吃了一个,一个每天猴子都吃其中的一半,当到第十天时,想再吃时(还没吃),发现只有一个桃子了。问题,最初共多少个桃子?

  分析:day10 = day9 * 1/2 + 1  = >  day9 =2 * (day10+1)

     day9 = day8 * 1/2 +1  =>  day8 = 2* (day9+1)

  

   

7,①函数的形参列表可以是多个

  ②C语言传递参数可以是值传递,也可以是指针传递

  ③函数的命名遵循标识符命名规范,首字母不能是数字,可以采用驼峰法或者下划线法,

   ④函数中的变量是局部的,函数外不生效

  ⑤基本数据类型默认是值传递的,即进行值拷贝,在函数内修改,不会影响到原来的值,如:

    

   ⑥如果希望函数内的变量能够改变函数外的变量,可以传入变量的地址 & ,函数内以指针的方式操作变量,从效果上看类似引用(即传递指针),如:

    

     

     形参是两个指针类型 int*

      执行机制分析:

     

  ⑦C语言不支持函数重载

   ⑧C语言支持可变参数函数

    

原文地址:https://www.cnblogs.com/shanlu0000/p/12349197.html