目录
实验10-4 递归实现顺序输出整数
实验10-10 十进制转换二进制
实验10-6 递归求简单交错幂级数的部分和
实验11-1-2 输出月份英文名
实验11-1-6 指定位置输出字符串
实验11-1-8 查找子串
递归的基本思路:
- 推出递归的条件或者进入递归的条件
- 每层递归需要执行的代码
第一种简单的就是:像Fabonacci数列和求阶乘这样,只需要判断递归推出的条件,然后递归加或者乘
int f( int n ){ if(n==0){ return 0; } if(n==1){ return 1; } return f(n-1)+f(n-2); }
第二种复杂一点就是,满足条件进入递归,直到最深层后不满足条件,然后依次推出递归执行相应的操作,比如依次输出123456的数字
void printdigits( int n ){ if (n / 10 > 0) printdigits(n / 10); printf ("%d\n", n % 10); }
实验10-4 递归实现顺序输出整数
void printdigits( int n ){
if (n / 10 > 0)
printdigits(n / 10);
printf ("%d\n", n % 10);
}
实验10-10 十进制转换二进制
void dectobin( int n ){
if(n/2!=0){
dectobin(n/2);
}
printf("%d",n%2);
}
实验10-6 递归求简单交错幂级数的部分和
#include <stdlib.h>
double fn( double x, int n ){
if(n==0){
return 0;
}
return pow(-1,n-1)*pow(x,n)+fn(x,n-1);
}
实验11-1-2 输出月份英文名
强调一下,函数里面如果要返回函数里面的形式参数,需要使用指针形式
- 如果这里使用char str[12][100]定义二维字符串数组的话,参数传递不出函数就会被释放,所以使用指针字符串
- 还有就是,指针指向的内容为空的话,NULL表示
//好好好,考英语是吧
#include <string.h>
char *getmonth( int n ){
if(n<1||n>12){
return NULL;
}
char *str[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
return str[n-1];
}
如果不想这么麻烦直接直接:
char *getmonth( int n ){
switch(n){
case 1: return "January";
case 2: return "February";
case 3: return "March";
case 4: return "April";
case 5: return "May";
case 6: return "June";
case 7: return "July";
case 8: return "August";
case 9: return "September";
case 10: return "October";
case 11: return "November";
case 12 :return "December";
default: return NULL;
}
}
实验11-1-6 指定位置输出字符串
#include<string.h>
#include <stdlib.h>
char *match( char *s, char ch1, char ch2 ){
int n=strlen(s);
char *a=(char*)malloc(sizeof(char)*n);
int j=0;
int i=0;
for(i=0;i<n;i++){
if(s[i]==ch1){
while(s[i]!=ch2){
a[j]=s[i];
j++;
i++;
}
a[j]=ch2;
j++;
break;
}//of if;
}
printf("%s\n",a);
for(;i+1<n;i++){
a[j]=s[i+1];
j++;
}
return a;
}
实验11-1-8 查找子串
返回数组中某个元素的指针,直接使用数组名a+元素的下标就可以了
比如求char a[100]="dhdssjsjbsdd",中求元素字符‘b’的地址指针,直接b+8就可以了
#include <stdlib.h>
#include <string.h>
//sjdhjdhdj
//dhd
/*char *search( char *s, char *t ){
int n=strlen(s);
int j=0;
int i=0;
int m=strlen(t);
for(i=0;i<n;i++){
if(s[i]==t[j]){
j++;
}else if(s[i]!=t[j]){
j=0;
}
if(j==m){
return s+i-m+1;
}
}
return -1;
}
*/
#include <string.h>
char *search(char *s, char *t) {
int n = strlen(s);
int m = strlen(t);
for (int i = 0; i < n; i++) {
int j = 0;
while (j < m && s[i + j] == t[j]) {
j++;
}
if (j == m) {
return s + i;
}
}
return NULL;
}
/*
char *search( char *s, char *t )
{
return strstr(s,t);
}
*/
OKOK,以后字符串函数为四个了
- strlen(a),返回字符串a的长度
- strcpy(b,a),把字符串a赋值给字符串b(copy,不能使用=)
- strcmp(a,b),比较字符串a比的大小,a>b返回正数,等于返回0
- strstr(a,b),查找子串b在主串a中出现的位置,如果出现返回第一个字符的地址,如果没有则返回NULL