关于递归函数相关练习

1.使用递归实现求n的k次方

#include <stdio.h>
#include <string.h>
int dg_1(int n,int k)
{
	if(k==0)//谁的0次方都等于1所以这个是递归的出口
	{
		return 1;
	}
	else
	{
		return n*dg_1(n,k-1);//2^0=1;2^1=2*1 2^2=2*(2*1)以此得出
	}
}	
int main(int argc, const char *argv[])
{
	int n=0,k=0;
	printf("请输入>>>");
	scanf("%d %d",&n,&k);
	int res=dg_1(n,k);
	printf("%d的%d次方是%d\n",n,k,res);
	
	return 0;
}

使用递归函数实现strlen功能

#include <stdio.h>
#include <string.h>
#define MAX 5
int strlen_1(char *prr)
{
    if(*prr=='\0')
    {
        return 0;
    }
    else
    {
        return 1+strlen_1(prr+1);
    }
}    

int main(int argc, const char *argv[])
{
    char arr[MAX+1];
    int len1;
    for(int i=0;i<MAX;i++)
    {
        printf("请输入第%d个元素\n",i+1);
        scanf("%c",&arr[i]);
        getchar();
    }    
        arr[MAX]='\0';
        len1=strlen_1(arr);
        printf("该字符串的长度为%d\n",len1);

    return 0;
}

3.使用递归实现汉诺塔问题

1  3  7  15  31  63 .......   3=1*2+1   7=2*3+1(都是前一项乘以2+1得到后一项)

#include <stdio.h>
#include <string.h>
int hnt(int n)
{
	if(n==1)
	{
		return 1;//第一项就是递归的出口
	}
	else
	{
		return 2*hnt(n-1)+1;
	}
}	
int main(int argc, const char *argv[])
{
	int n=0;
	printf("请输入>>>");
	scanf("%d",&n);
	int res=hnt(n);
	printf("需要操作%d次\n",res);
	return 0;
}

4.定义一个函数将一个字符串从大到小排序

5.实现一个函数,用于检查一个字符串是否是回文字符串(正序和反序都相同)

思路:首字符和尾字符,然后递归地检查去掉这两个字符后的子字符串是否仍然是回文。

#include <stdio.h>
#include <string.h>
void zfc_5(char *prr,int n,int m)//n代表的是字符串的第一个字符,m表示的是字符串的最后一个字符
{
	if(n>=m)//表示字符串为空或者只有一个字符,是回文数
	{
		printf("该字符串是回文数\n");
		return;
	}
	if(prr[n]!=prr[m])//如果第一个字符和最后一个字符不相等,则不是回文
	{
		printf("该字符串不是回文字符串\n");
		return;
	}
	return zfc_5(prr,n+1,m-1);//递归的检查去掉这两个字符后的字符串是否是回文字符串
}	


int main(int argc, const char *argv[])
{
	/*char prr[]="mannam";
	int len=strlen(prr);
	zfc_5(prr,0,len-1);*/
   char prr[20]="";
   printf("请输入字符串");
   gets(prr);
   int len=strlen(prr);
   zfc_5(prr,0,len-1);
	return 0;
}

6.使用指针完成判断自己的主机存储多字节整数时,是大端存储还是小端存储

#include <stdio.h>
#include <string.h>
void cunchu(void)
{
	int num=0x12345678;
	char *p=(char *)&num;
	if(*p==0x12)
	{
		printf("大端存储\n");
	}
	else
	{	
		printf("小端存储\n");
	}
}	
int main(int argc, const char *argv[])
{
	cunchu();
	
	return 0;
}

7.

#include <stdio.h>
#include <string.h>
int  tongji(char arr[])
{
	int len=strlen(arr);//计算字符串实际长度
	int count=0;//用来统计单词个数
	for(int i=0;i<len;i++)
	{
		if(arr[i]==' '&&arr[i+1]!=' ')
		{
			count++;
		}
	}
	if(arr[len-1]!=' ')
	{
		count++;
	}
	return count;//将单词个数返回
}	
int main(int argc, const char *argv[])
{
	char arr[30];
	printf("请输入>>>");
	gets(arr);
	printf("一共有%d个单词\n",tongji(arr));

	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值