【C语言】习题---递归函数
1.递归常见错误【栈溢出】stack overflow
(1)局部变量、函数形参存放于栈区
(2) Stack Overflow
2.递归习题
1.接受一个整形值,顺序打印它的每一位
(1)如 输入1234 ,打印出1 2 3 4
(2)步骤
[*]//打印123 4
[*]//打印12 3 4
[*]//打印1 2 3 4
(3)每次打印最右位的数
void print(int n){if(n>9)//n>9,则至少是两位数{ print(n/10);} printf("%d",n%10);}int main(){unsigned int num=0;scanf("%d",&num);//1234//递归print(num); return 0;}
2.求字符串长度,不允许创建临时变量
(1)字符串末尾隐含‘\0’
(2)*str++表示数组str[ ]的首元素后移一位
int length(char* str){int count=0;while(*str!='\0'){ count++; *str++;//地址+1} return count;}int main(){char arr[]="abc";int len = length(arr);printf("len=%d",len);return 0;}
3.求n的阶乘
递归、非递归均可做
int function(int n){int i=0;int ret=1;for(i=1;i<=n;i++){ ret=ret*i;}return ret;}int main(){int ret=0 ;int n=0;scanf("%d",&n);ret=function(n);printf("%d",ret);}
4.求第n个斐波那契数列
前两个数之和等于第三个数:1 1 2 3 5 8 13 21 34 55------
Fib(n-1)+Fib(n-2)
int Fib(int n){if(n<=2) return 1;else return Fib(n-1)+Fib(n-2);}int main(){int n=0;int ret=0;scanf("%d",&n);ret=Fib(n);printf("%d\n",ret);}
5.汉诺塔问题
问题描述:a,b,c三个柱子,a柱上有n个盘子(上面小,下面大),请借助b柱子,把a柱子上的盘子移动到c柱子上,移动过程中要求始终保持:上面的盘子小,下面的盘子大。
关键:借助b柱子,每次把a最下面的盘子移到c柱子上
VS /test15
https://blog.51cto.com/u_15459193/4806724
页:
[1]