
程序调用自身是递归
一个最简单的递归
int main()
{
printf("hehe\n");
main();
return 0;
}
会一直打印hehe,但是会因为栈溢出而停止;
每次调用函数都用在栈区申请空间,所以会导致栈溢出
练习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);
return 0;
}
练习2求字符串长度
#include
int my_strlen(char* str)
{
int count = 0;
while(*str != ')'++
{
count;++
str;}
return
; count}
int
main ()char
{
[ arr]= "whu shangan";int
= len my_strlen ()arr;//arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址printf
("len = %d\n",)len;return
0 ;}
int
my_strlen (char*) strif
{
(*!=str ')' //注意此时的str是第一个元素的地址//*str就是表示解引用,就是第一个数组元素wreturn
1
+ my_strlen(+1str);//str+1表示下第二个数组元素的地址elsereturn
0
; }int
main
( )char[
{
] arr="whu shangan" ;int=
my_strlen len ( );arr//arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址printf(
"len = %d\n",);lenreturn0
; }int
Fac
递归的主要思考方式在于:把大事化小
2.递归与迭代练习:求一个数的阶乘
( int)if n(
{
<=1n)return1
; elsereturn
*
Fac n(-1n);}int
main
( )int=
{
0 n ; int=
0 ret ; scanf(
"%d",&);n=Fac
ret ( );nprintf(
"%d\n",);retreturn0
; }int
Fib
练习:求斐波那契数列
斐波那契数列:前两个数之和等于第三个数
1 1 2 3 5 8 13 21 34 55…
( int)int n=
{
1 a ; int=
1 b ; int=
1 c ; while(
2)n>=*
{
c ; a//可以保证不重复b= ;
a = b;
b -- c;
n}return
;
} cint
main
( )int=
{
0 n ; int=
0 ret ; scanf(
"%d",&);n=Fib
ret ( );nprintf(
"%d",);retreturn0
; }
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)