函数的秘密之 递归函数

C 语言自学之  递归函数

 1 #include <stdio.h>
 2  
 3 /* 定义获取单词数量的函数 */
 4 int getWordNumber(int n)
 5 {
 6     if(n == 1)
 7     {
 8         return 1;    //第一天只会1个单词
 9     }
10     else{
11         return getWordNumber(n-1)+n ;       //到第天会的单词数量,每天都为单词数量都比前一天多1,表达式为 (n-1)+n
12     }
13 }
14 int main()
15 {
16     int num = getWordNumber(10);     //获取会了的单词数量
17     printf("小明第10天记了:%d个单词。\n", num);
18     return 0;
19 }

递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。

Dome 1 :计算n的阶乘可以使用以下代码:

 1 #include <stdio.h>
 2  
 3 int factorial(int n)//定义函数
 4 {
 5     int result;
 6     if(n<0)
 7     {
 8         printf("输入错误!\n");
 9         return 0;
10     }
11     else if(n==0 || n==1)
12     {
13         result=1;
14     }
15     else
16     {
17         result = factorial(n-1)*n;//调用自身
18     }
19     return result;
20 }
21 int main()
22 {
23     int n=5;
24     printf("%d的阶乘=%d",n,factorial(n));
25     return 0;
26 }

运行结果为:5的阶乘=120

Dome 2:

 1 #include <stdio.h>
 2  
 3 int getPeachNumber(n)
 4 {
 5     int num;    //定义所剩桃子数
 6     if(n==10)
 7     {
 8        return 1;      //递归结束条件
 9     }
10     else
11     {
12         num = (getPeachNumber(n+1)+1)*2;   //这里是不应该用递归呢?
13         printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
14     }
15     return num;
16 }
17 int main()
18 {
19     int num = getPeachNumber(1);
20     printf("猴子第一天摘了:%d个桃子。\n", num);
21     return 0;
22 }
 1 #include <stdio.h>
 2  
 3 int getPeachNumber(n)
 4 {
 5     int num;    //定义所剩桃子数
 6     if(n==10)
 7     {
 8        return 1;      //递归结束条件
 9     }
10     else
11     {
12         num = (getPeachNumber(n+1)+1)*2;   //这里是不应该用递归呢?
13         printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
14     }
15     return num;
16 }
17 int main()
18 {
19     int num = getPeachNumber(1);
20     printf("猴子第一天摘了:%d个桃子。\n", num);
21     return 0;
22 }

递归函数特点:
        每一级函数调用时都有自己的变量,但是函数代码并不会得到复制,如计算5的阶乘时每递推一次变量都不同;
        每次调用都会有一次返回,如计算5的阶乘时每递推一次都返回进行下一次;
        递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;
        递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
        递归函数中必须有终止语句。
一句话总结递归:自我调用且有完成状态

posted @ 2020-12-13 17:04  伍悦匿匿  阅读(104)  评论(0编辑  收藏  举报