您的位置:首页 > 博客中心 > 互联网 >

函数和递归

时间:2022-05-11 06:54

递归:直接或间接调用自身的一种方法,把一个大型复杂的问题转换为与原问题相似的小问题来求解 主要思考方式:把大事化小     递归的两个条件: 存在限制条件,当满足这个限制条件的时候,递归便不再继续。 每次递归调用之后越来越接近这个限制条件     eg. int main() { printf("haha"); main() return 0; }   递归常见错误:栈溢出   练习1:输入1234 输出1 2 3 4 void print(int n ) { if(n> 9) { print(n/10 ); } printf("%d",n%10 ); }   int main() { unsigned int num = 0; scanf("%d",&num); //递归 print(num ); //print(123) 4 //print(12) 3 4 //print(1) 2 3 4 return 0; }   练习2:求字符串长度 //模拟实现一个strlen函数 int my_strlen(char* str) { int count =0; while(*str !=‘\0‘ ) { count++; str++; } return count; }   int main() { char arr[ ] ="bit"; int len = my_strlen(arr);//arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址 printf("len = %d\n",len); return 0; }   递归与迭代   练习3:求n的阶乘   int Fac(int n) { if(n<=1) return 1; else return n*Fac(n-1); } int main() { int n=0; int ret = 0; scanf("%d",&n); ret = Fac(n); printf("%d\n",ret); return 0; }   练习4:求第n个斐波那契数 eg. 1 1 2 3 5 8 13 21 34 55....   int Fib(int n) { if(n<=2) return 1; else return Fib(n-1)+Fib(n-2) } //效率低,重复数据多 int mian() { int n=0; int ret =0; scanf("%d",&n); ret = Fib(n); printf("ret =%d\n",ret); return 0; }   用迭代(循环)提高速度: int Fib (int n) { int a=1; int b=1; int c=1;   while (n>2) { c=a+b; a=b; b=c; n--; } return c; }  

本类排行

今日推荐

热门手游