C语言练习06(递归)

第一题

C语言练习06(递归)

第二题

C语言练习06(递归)
解析

1 – 2*Fun3 2*2*2*2

2 – 2*Fun4 = 2*2*2

3 – 2*Fun5 2*2

4 – return 2

所以返回值为4

第三题

C语言练习06(递归)

第四题逆序打印字符串

方法一

void reverse(char arr[])
{
	int left = 0;
	//int right = sz - 2;
	int right = strlen(arr) - 1;
	while (left < right)
	{
		char tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;

		left++;
		right--;
	}
}

int main()
{
	char arr[] = "abcdef"; // a b c d e f \0
	//int sz = sizeof(arr) / sizeof(arr[0]);  //函数内部不行 
	reverse(arr);

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

	return 0;
}

方法二:递归的方式逆序打印字符串(一个参数)

C语言练习06(递归)
int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

void reverse(char* str)
{
	char tmp = *str; //1
	int len = my_strlen(str);
	*str = *(str + len - 1); // 2
	*(str + len - 1) = '\0';//3
	if (my_strlen(str+1) >= 2)
	{
		reverse(str + 1);//4
	}
	
	*(str + len - 1) = tmp;
}


int main()
{
	char arr[] = "abcdef"; // a b c d e f \0
	//int sz = sizeof(arr) / sizeof(arr[0]);  //函数内部不行 
	reverse(arr);

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

	return 0;
}

方法三:递归多个参数

int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

void reverse(char arr[], int left, int right)
{
	char tmp = arr[left];
	arr[left] = arr[right];
	arr[right] = tmp;
	if (left < right)
	{
		reverse(arr, left + 1, right - 1);
	}
}



int main()
{
	char arr[] = "abcdef"; // a b c d e f \0
	//int sz = sizeof(arr) / sizeof(arr[0]);  //函数内部不行 
	int left = 0;
	int right = my_strlen(arr) - 1;
	reverse(arr,left,right);

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

	return 0;
}

题目5:计算一个数的每位之和

C语言练习06(递归)
#include <stdio.h>
#include <string.h>

int DigitSum(int n)
{
	if (n > 9)
		return DigitSum(n / 10) + n % 10;
	else
		return n;
}


int main()
{
	unsigned int n = 0;
	scanf("%u", &n);
	int sum = DigitSum(n);
	printf("%d\n", sum);
	return 0;
}

题目5:递归实现n的k次方

C语言练习06(递归)
C语言练习06(递归)
double Pow(int n,int k)
{
	if (k > 0)
		return n * Pow(n, k - 1);
	else if (k == 0)
		return 1;
	else
		return 1.0 / Pow(n, -k);
}


int main()
{
	int n = 0;
	int k = 0;
	scanf("%d%d", &n, &k);
	double ret = Pow(n, k);
	printf("%f\n", ret);
	return 0;
}

本网站原创文章版权归何大锤的狂飙日记所有。发布者:何大锤,转转请注明出处:何大锤的博客

(0)
何大锤的头像何大锤管理团队

相关推荐

  • 第二章数据结构线性表 – 带头结点的单链表

    一、单链表的定义和表示 – 带头结点的单链表 1、定义 单链表是由表头唯一确定,因此单链表可以用头指针的名字来命名 若头指针名是L,则把链表称为表L 2、单链表的存储结构 二、单链表基本操作的算法实现 – 带头结点的单链表 2.1 单链表的初始化 2.2 判断一个链表是否为空 一、带头结点的单链表代码实现 共6种函数代码 三、头插法创…

    3小时前
    200
  • 第二章数据结构线性表 – 单链表定义

    一、引言 1.1 知识框架 1.2 有了数组为什么还要链表? 在前面我们介绍过数组,数组中元素是存储在连续的内存位置在声明数组时,我们可以指定数组的大小,但这将限制数组可以存储的元素数量 例如我们声明的是 int arr[10],那么arr数组最多可以存储10个数据元素 但是我们事先不知道元素的大小呢? 我们该如何去做? 当然首先想到的是申请一个足够大的数组…

    6小时前
    200
  • 04 程序流程结构

    C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构 循环结构:依据条件是否满足,循环多次执行某段代码 顺序结构:程序按顺序执行,不发生跳转 选择结构:依据条件是否满足,有选择的执行相应功能 4.1 选择结构 4.1.1 if语句 作用:执行满足条件的语句 if语句的三种形式 示例: 注意:if条件表达式后不要加分号 示例: 示例: 嵌套if…

    3天前
    300
  • 初始C语言01

    0、什么是C语言? C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MC…

    4天前
    000
  • 01 你好Python

    一、课件

    4天前
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

2211932694

在线咨询: QQ交谈

邮件:hdcblog1999@163.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
网站建设中ing......