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)
何大锤的头像何大锤管理团队

相关推荐

  • C语言初阶 – 指针

    一、指针是什么? 指针是什么? 指针理解的2个要点: 1、指针是内存中一个最小单元(内存单元)的编号,也就是地址 2、平时口语中说的指针,通常是指针变量,用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常指的是指针变量 那么我们就这样理解:内存 指针变量 我们可以通过&(取地址操作符)取出变量的内存地址,把地址可以存放到一个变量中,这个变…

    2025年6月29日
    000
  • 09 通讯录管理系统

    通讯录管理系统 1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 2、创建项目 创建项目步骤如下: 2.1 创建项目 打开vs2017后,点击创建新项目,创建新的C++项目 填写项目名称,选择项目路径 2.2添加文件 添加成功后,效果如图: 至此,项目已创建完毕 3、菜单功能 …

    2025年6月22日
    300
  • 08 结构体

    8 结构体 8.1 结构体基本概念 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型 8.2 结构体定义和使用 语法:struct 结构体名 { 结构体成员列表 }; 通过结构体创建变量的方式有三种: 示例: 总结1:定义结构体时的关键字是struct,不可省略 总结2:创建结构体变量时,关键字struct可以省略 总结3:结构体变量利用操作符 &…

    2025年6月21日
    300
  • 07 指针

    7.1 指针的基本概念 指针的作用: 可以通过指针间接访问内存 7.2 指针变量的定义和使用 指针变量定义语法: 数据类型 * 变量名; 示例: 指针变量和普通变量的区别 总结1: 我们可以通过 & 符号 获取变量的地址 总结2:利用指针可以记录地址 总结3:对指针变量解引用,可以操作指针指向的内存 7.3 指针所占内存空间 提问:指针也是种数据类型…

    2025年6月20日
    300
  • 第2章 C语言概述

    一、复习题 1、C语言的基本模块是什么? 它们都叫函数 2、什么是语法错误?写一个英语例子和C语言例子 3、什么是语义错误?写一个英语例子和C语言例子 4、Indiana Sloth编写了下面的程序,并征求你的意见。请帮助他评定 第一行没有加<> 赋值语句错误 函数错误应该是printf 花括号不齐全 二、编程练习 2.1 2.2 2.3 编写一…

    2025年6月20日
    000

发表回复

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

联系我们

2211932694

在线咨询: QQ交谈

邮件:hdcblog1999@163.com

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

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