函数的秘密之 递归函数
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的阶乘时每递推一次都返回进行下一次;
递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;
递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
递归函数中必须有终止语句。
一句话总结递归:自我调用且有完成状态
本文为博主原创文章,转载请注明来源http://www.cnblogs.com/wuyuenini/