函数递归练习

//1、斐波那契数列

//1 1 2 3 5 8 13 21 34 55 89 144 ....


//2、编写递归函数求两个正整数ab的最大公约数(GCDGreatest Common Divisor),使用Euclid算法:

//

//如果a除以b能整除,则最大公约数是b

//

//否则,最大公约数等于ba%b的最大公约数。

//

//Euclid算法是很容易证明的,请读者自己证明一下为什么这么算就能算出最大公约数。最后,修改你的程序使之适用于所有整数,而不仅仅是正整数。

//3、趣味问题——年龄。有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?用递归算法实现。


练习:

1. 封装一个函数,输出两个整数里的较大那个


2. 封装一个函数,输出两个浮点数里的较小那个



3. 封装一个函数,来判读一个字符是否是大写字母

如果是,返回1,否则返回0!


4. 封装一个函数,来判读一个字符是否是数字字符

如果是,返回1,否则返回0!


5. 封装一个函数,来判读一个字符是否是英文字母

如果是,返回1,否则返回0!


6. 封装一个函数,传入一个字符,如果是大写那么转化小写然后返回,否则保持不变返回

----------------------------------------------------

7. 输入一个字母判断是星期几!

T S 一个字母没法判断,这时需要输入第二个字母再判断是星期几。

MON TUS WED THU FRI STA SUN

实现一个函数,传入一个字符,函数里打印结果 (函数里,如果第一个字符无法判断,函数可以接收第二个字符!)


#include <stdio.h>

//小明一次可以爬一级或者二级台阶试问n级台阶小明来走共有几种走法

//示例:

//台阶数1 走法1

//台阶数2 走法2 1. 一级一级 2.二级

//台阶数3走法3 1.一级一级 一级 2.一级二级3.二级一级

//4 1111 121 211 112 22

//5


//int func(int n)

//{

// if (n==1)

// {

// return 1;

// }

// else if (n==2)

// {

// return 2;

// }

// else

// {

// return func(n-1)+func(n-2);

// }

//}

//

//int main(int argc, const char * argv[])

//{

//

// // insert code here...

// printf("%d\n",func(6));

// return 0;

//}


//从键盘输入个数不定的字符串(不超过10个),把这些字符串放入一个数组中,然后再输入一个字符串,输入两个数nmn是数组的下标,m是从下标n开始数m个字符串),从下标n开始数m个字符串进行查找输入的最后一个字符串;找到之后,有几个就删除几个。后面没有被删除的字符串前移。(不要超过范围)

//比如:

//输入:

//I am Optimus Prime lucy

//am

//0 2

//输出为

//I

//Optimus

//Prime

//lucy

//输入:

//Hi welcome to to qianfeng lilei

//haha

//1 2

//输出为

//Hi

//welcome

//to

//to

//qianfeng

//lilei

#include <stdlib.h>

#include <string.h>

/*

int main(int argc,const char *argv[])

{

int cnt =0;

char *pstr[10]={NULL};

for (int i=0; i<10; i++) {

pstr[i]=(char *)malloc(50);

scanf("%s",pstr[i]);

cnt++;

if (getchar()=='\n') {

break;

}

}

char substr[50]={};

int n,m;

scanf("%s %d %d",substr,&n,&m);

for (int i=n; i<n+(m>cnt?cnt:m); i++) {

if (strcmp(substr,pstr[i])==0) {

free(pstr[i]);

pstr[i]=NULL;

}

}

for (int i=0; i<cnt; i++) {

if(pstr[i])

{

printf("%s\n", pstr[i]);

}

}

return 0;

}*/

//1000

//2

//phone

//10phone00

/*

int main(int argc,const char *argv[])

{

char str1[100]={};

char str2[50]={};

int index;

scanf("%s %s %d", str1, str2, &index);

int len1 = (int)strlen(&str1[index]);

int len2 = (int)strlen(str2);

memmove(&str1[index]+len2, &str1[index], len1);

str1[index+len1+len2]='\0';

strncpy(&str1[index], str2, len2);

printf("%s\n", str1);

return 0;

}*/


//返回在两字符串中第一个相同的子串(大于1个字符),并将子串输出


//比如:

//输入

//adbAFEHHFS

//acwfagAFEf

//输出为

//AFE

//

//输入

//qfdgJKlin

//qdfgJKwfo

//输出为

//gJK


/*#include <string.h>


int main(int argc,const char *argv[])

{

char str1[100]={};

char str2[100]={};

int i=0;

char *pstr1 = NULL;

char *pstr2 = NULL;

scanf("%s %s", str1,str2);

int len1 = (int)strlen(str1);

int len2 = (int)strlen(str2);

for (i=0; i<len2-1; i++) {

pstr1 = (char *)memmem(str1, len1, &str2[i], 2);

if (pstr1) {

break;

}

}

pstr2 = &str2[i];

while (*pstr1 == *pstr2) {

pstr1++;

pstr2++;

}

*pstr2 = '\0';

printf("%s\n", &str2[i]);


return 0;

}*/


//samsamcomcom

//ssaammmmccoo


int main(int argc,constchar *argv[])

{

char str[100]={};

scanf("%s",str);

int len = (int)strlen(str);

for (int i=0; i<len; i++) {

char ch = str[i];

for (int j=i+1; j<len; j++) {

if (str[j]==ch) {

memmove(&str[i+1], &str[i], j-i);

str[i+1]=ch;

break;

}

}

}


printf("%s\n",str);

return 0;

}


//递归:函数直接或者间接的调用本身,那么这个函数是递归的

//n! = n*(n-1)!

//(n-1)! = (n-1)(n-2)!

//

//1! = 1


//n!

//5 = 5*4! 120

//4!= 4*3! 24

//3!= 3*2! 6

//2!= 2*1! 2

//1!= 1


//factrial(2)=2*factrial(1)

//factrial(3)=3*factrial(2)=3*2*factrial(1)


//int factrial(int n)

//{

// if (n==1)

// {

// return 1;

// }

// return n*factrial(n-1);

//}

//

//int main(int argc, const char *argv[])

//{

//

// printf("%d\n",factrial(5));

//

// return 0;

//}


//void change_val(int a,int b)

//{

// int val1, val2;

// val1 = a;

// val2 = b;

// printf("val1 = %d val2 = %d\n", val1, val2);

// printf("val1 = %p, val2 = %p\n",&val1, &val2);//%p打印地址

//}

//

//void change_val2(void)

//{

// int a=3, b=5;

// change_val(a, b);

// //printf("%p %p\n",&a,&b);

//

//}

//

//int main(int argc,const char *argv[])

//{

// change_val(3, 5);

// //change_val(4, 6);

//

// change_val2();

// return 0;

//}



//1、斐波那契数列

//1 1 2 3 5 8 13 21 34 55 89 144 ....


//int fabonaci(int n)

//{

// if (n==1 || n==2) {

// return 1;

// }

// return fabonaci(n-1)+fabonaci(n-2);

//}

//

//int main(int argc,const char *argv[])

//{

// for (int i=1; i<=50; i++) {

// printf("%d ",fabonaci(i));

// }

// printf("\n");

// return 0;

//}



//2、编写递归函数求两个正整数ab的最大公约数(GCDGreatest Common Divisor),使用Euclid算法:

//

//如果a除以b能整除,则最大公约数是b

//

//否则,最大公约数等于ba%b的最大公约数。

//

//Euclid算法是很容易证明的,请读者自己证明一下为什么这么算就能算出最大公约数。最后,修改你的程序使之适用于所有整数,而不仅仅是正整数。


//3、趣味问题——年龄。有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?用递归算法实现。

//int euclid(int a,int b)

//{

// if(a%b==0)

// {

// return b;

// }

// return euclid(b, a%b);

//}

//

//int main(int argc,const char *argv[])

//{

// printf("%d\n", euclid(319, 377));

//

// return 0;

//}


//int age(int n)

//{

// if (n==1) {

// return 10;

// }

// return 2+age(n-1);

//}

//

//int main(int argc, const char *argv[])

//{

// printf("%d ", age(5));

// return 0;

//}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值