鹏哥C语言62---第9次作业:函数递归练习

news2024/10/6 1:21:01

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
//-------------------------------------------------------------------------------------------第九次作业  函数递归等

//-------------------------------------------------------------------------------单选1
关于递归的描述错误的是:(C)

A.存在限制条件,当满足这个限制条件的时候,递归便不再继续
B.每次递归调用之后越来越接近这个限制条件
C.递归可以无限递归下去
D.递归层次太深,会出现栈溢出现象

//-------------------------------------------------------------------------------单选2
根据下面递归函数:调用函数Fun(2),返回值是多少(D)

int Fun(int n)
{
    if(n == 5)
             return 2;
   else
             return 2*Fun(n+1);
}

A.2
B.4
C.8
D.16
*///-------------------------------------------------------------------------------编程题3:打印整数每一位
//递归方式实现打印整数的每一位 例如 1234 打印 1 2 3 4
//123 4
//12 34
//1 2 3 4

void Print(unsigned int n) //1234
{
    if (n > 9)
    {
        Print(n / 10);
    }
    printf("%d ", n%10);
}

int main()
{
    unsigned int num = 0;
    scanf("%u", &num); // 1234

    Print(num);
  
    return 0;
}

//-------------------------------------------------------------------------------编程题4:求 n 的阶乘
//递归和非递归,分别实现求n的阶乘(不考虑溢出问题)

//-----------------------------------------------------------------4.1 循环求阶乘n

int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int num = 1;
    for (i = 1; i <= n; i++)
    {
        num = num * i;
    }
    printf("%d\n", num);

    return 0;
}

//-----------------------------------------------------------------4.2 递归求阶乘n
//5!=1*2*3*4*5
//5!=4!*5
//4!=3!*4
//3!=2!*3
//2!=1!*2
//1!=1

int factorial(int n) //5
{
    if (n > 0)
        return factorial(n - 1) * n;
    else
        return 1;
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    int ret = factorial(n);
    printf("%d\n", ret);

    return 0;
}

//-------------------------------------------------------------------------------编程题5:strlen的模拟
//递归和非递归分别实现strlen

//----------------------------------------------------------------5.1 循环求strlen

int my_strlen(char arr[])
{
    int i = 0;
    int count = 0;
    while (arr[i] != '\0')
    {
        count++;
        i++;
    }
    return count;
}

int main()
{
    char arr[] = "abcdef"; // [a b c \0]

    int len = my_strlen(arr); // 函数传参时,传的是首字符 a 的地址
    printf("%d\n", len);

    return 0;
}

//-----------------------------------------------------------------5.2 递归求strlen
//my_strlen("abc");
//1+my_strlen("bc");
//1+1+my_strlen("c");
//1+1+1+my_strlen("\0");
//1+1+1+0

int my_strlen(char* arr)
{
    if (*arr != '\0')
        return 1 + my_strlen(arr + 1);
    else
        return 0;
}

int main()
{
    char arr[] = "abcdefgh"; // [a b c d e f g h\0]

    int len = my_strlen(arr); // 函数传参时,传的是首字符 a 的地址
    printf("%d\n", len);

    return 0;
}

//-------------------------------------------------------------------------------编程题6:字符串逆序(递归实现)
//编写一个字符串 reverse_string(char* string)
//将参数字符串中的字符反向排列,不是逆序打印
//不能使用V函数库中的字符串操作符 
// 例如: char arr[]="abcdef";
//   逆序之后数组里的内容变成  fedcba//--------------------------------------------------------------6.1 用循环求逆序

int main()
{
    char arr[] = "abcdef";
    int sz = sizeof(arr) / sizeof(arr[0]); //把 \0 也计算进去了,算出来7/1=7
    int left = 0;
    int right = sz - 2; //所以 sz-2
    // int right=strlen(arr)-1;  //用strlen 求字符串长度 6
    while (left < right)
    {
        char tmp = arr[left];
        arr[left] = arr[right];
        arr[right] = tmp;

        left++;
        right--;
    }

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

    return;
}

//---------------------------------------------------------------6.2 用函数求逆序

void reverse(char arr[])
{
    int left = 0;
    int right = strlen(arr) - 1;  //用strlen 求字符串长度 6
    while (left < right)
    {
        char tmp = arr[left];
        arr[left] = arr[right];
        arr[right] = tmp;

        left++;
        right--;
    }
}

int main()
{
    char arr[] = "abcdef";
    reverse(arr);

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

    return;
}

//------------------------------------------------------------------6.3 用递归求逆序

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(strlen(str+1)>=2) //(递归的条件)
             reverse(str + 1); //4
    *(str + len - 1) = tmp; //5
}

int main()
{
    char arr[] = "abcdef";
    reverse(arr);

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

    return;
}

//------------------------------------------------------------------6.4 用递归求逆序plus

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

void reverse(char arr[], int left, int right)
{
    if(left<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[] = "abcdefg";
    int left = 0;
    int right = my_strlen(arr) - 1;
    reverse(arr,left,right);

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

    return 0;;
}

//---------------------------------------------------------------------------------编程题7:计算一个数的每位之和
//写一个递归函数 DigitSum(n),输入一个非负整数,返回组成他的非负之和
//例如:调用 DigitSum(1729),应该返回1 7 2 9,和是19
//输入 1279  输出19

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

int main()
{
    unsigned int n = 0;
    scanf("%d", &n);
    int ret = DigitSum(n);

    printf("%d\n", ret);

    return 0;
}

//-------------------------------------------------------------------------------编程题8:递归实现n的k次方
//编写一个函数实现 n 的k次方

double Power(int n, int k)
{
    if (k > 0)
        return n * Power(n, k - 1);
    else if (k == 0)
        return 1;
    else
        return 1.0 / Power(n, -k);

}

int main()
{
    int n = 0;
    int k = 0;
    scanf("%d %d", &n, &k);
    double ret = Power(n, k);

   printf("%lf\n", ret);
    return 0;
}

//-------------------------------------------------------------------------------编程题9:计算斐波那契数
//递归和非递归分别实现求第n 个斐波那契数
//求第 n 个斐波那契数(不考虑溢出)
// 1 1 2 3 5 8 13 21 34 55...
// 前两数相加等于第三个数

int Fibonacci(int n)
{
    if (n < 3)
        return 1;
    if (n >= 3)
    {
        return Fibonacci(n - 1) + Fibonacci(n - 2);
    }

}

int main()
{
    int n = 0;
    scanf("%d", &n);
    int ret = Fibonacci(n);
    printf("%d\n", ret);

    return 0;
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macos安装mongodb

文章目录 说明安装和配置安装mongodb配置PATH变量 验证日志及数据存放目录 mac启动和关闭mongodb后台启动失败问题mongodb-compass(GUI) 说明 Homebrew core 列表目前已经将 MongoDB 移除,不再为其提供支持。但是使用国内镜像的brew还是可以安装的&#xff01;这里直接从官网下…

使用 Python 代码连接 PostgreSQL

Python 是一个功能非常强大的编程语言&#xff0c;尤其在与数据库交互时&#xff0c;提供了丰富的解决方案。在实际项目中&#xff0c;我们经常需要通过 Python 连接并操作数据库。为了简化这种操作&#xff0c;ORM&#xff08;对象关系映射&#xff09;框架提供了便利。ORM 能…

aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图

aws(学习笔记第一课) 使用AWS CLI 学习内容&#xff1a; 使用AWS CLI配置密钥对创建ec2 server使用drawio&#xff08;vscode插件&#xff09;进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台&#xff0c;可以提供ec2&#xff0c;vpc&#xff0c;SNS以及clo…

灵足时代:具身智能核心部件的新秀崛起——解析数千万元天使轮融资

在智能科技日新月异的今天,具身智能作为连接物理世界与数字世界的重要桥梁,正逐步成为科技创新的前沿阵地。近日,具身智能核心部件领域的新锐公司——“灵足时代”宣布完成数千万元天使轮融资,这一消息无疑为行业内外带来了强烈的震撼与期待。本轮融资由雅瑞智友科学家基金…

多用户网页聊天室(测试报告)

一、项目背景 随着现代互联网的快速发展&#xff0c;实时通信系统&#xff08;如聊天应用&#xff09;已成为人们日常交流的重要工具。多用户网页聊天室项目旨在为用户提供一个基于Web的实时聊天平台&#xff0c;支持用户之间的即时通信、好友管理和历史消息记录查看。为了提升…

ModuleNotFoundError: No module named ‘package‘

报错&#xff1a; Traceback (most recent call last): File “”, line 198, in run_module_as_main File “”, line 88, in run_code File "D:\python\helloworld.venv\Scripts\pip.exe_main.py", line 4, in File "D:\python\helloworld.venv\Lib\site-pac…

3分钟学会下载 blender

1. blender简介 Blender是一款开源的3D创作套件&#xff0c;它由Blender Foundation维护&#xff0c;并得到了全球志愿者和专业开发者的支持。Blender广泛应用于3D模型的制作、动画、渲染、视频编辑、游戏创建、模拟、 composting以及3D打印等多个领域。 功能特点&#xff1a…

Gitlab flow工作流

Gitlab flow Gitlab flow 是 Git flow 与 Github flow 的综合。它吸取了两者的优点&#xff0c;既有适应不同开发环境的弹性&#xff0c;又有单一主分支的简单和便利。它是 Gitlab.com 推荐的做法。 1 上游优先 Gitlab flow 的最大原则叫做"上游优先"&#xff08;…

【网络篇】计算机网络——应用层详述(笔记)

目录 一、应用层协议原理 1. 进入应用层 2. 网络应用程序体系结构 &#xff08;1&#xff09;客户-服务器体系结构&#xff08;client-server architecture&#xff09; &#xff08;2&#xff09; P2P 体系结构&#xff08;P2P architecture&#xff09; 3. 进程间通讯 …

2024/10/5 数据结构打卡

对两个长度为n的升序序列A和B的元素按由小到大的顺序依次访问&#xff0c;这里访问的 含义只是比较序列中两个元素的大小&#xff0c;并不实现两个序列的合并&#xff0c;因此空间复杂度为 O(1)。按照 上述规则访问到第n个元素时&#xff0c;这个元素即为两个序列A和B的中位数。…

预扣预缴、年度汇算清缴与年终奖的个税计算

目录 1. 税率表2. 年度汇算清缴3. 预扣预缴3.1 预扣预缴的代码实现3.2 全年应纳税额与全年收入的关系 4. 年终奖 1. 税率表 月度税率表&#xff1a; 级数月度应纳税所得额税率&#xff08;%&#xff09;速算扣除数1 ( 0 , 3000 ] (0, 3000] (0,3000] 3 3 3 0 0 02 ( 3000 , 1…

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

Python数据结构与算法问题详解

Python数据结构与算法问题详解 Python 作为一种高级编程语言&#xff0c;凭借其简洁的语法和强大的内置库&#xff0c;成为了数据结构与算法学习的绝佳工具。本文将深入解析几种常见的数据结构&#xff0c;并结合具体的算法&#xff0c;展示如何在实际问题中高效解决问题。通过…

EEPROM读写实验——FPGA学习笔记18

一、EEPROM简介 Electrically Erasable Progammable Read Only Memory:是指带电可擦可编程只读存储器&#xff0c;是一种常用的非易失性存储器&#xff08;掉电数据不丢失&#xff09; EEPROM发展历史 我们这次实验所用的AT24C64存储容量为64Kbit&#xff0c;内部分成256页&am…

PELT算法

PELT算法的范畴 PELT算法&#xff08;Pruned Exact Linear Time&#xff09;属于时间序列分析和变点检测&#xff08;Change Point Detection&#xff09;范畴的算法。 从更广泛的角度来看&#xff0c;PELT算法还可以归类为以下几类算法的子集&#xff1a; 1. 时间序列分析&…

SpringBoot在校园健康信息管理中的创新

第5章 系统详细设计 5.1管理员功能模块 管理员登录&#xff0c;通过填写注册时输入的用户名、密码、角色进行登录&#xff0c;如图5-1所示。 图5-1管理员登录界面图 管理员登录进入师生健康信息管理系统可以查看个人中心、学生管理、教师管理、数据收集管理、问卷分类管理、…

昇思学习打卡营学习记录:DCGAN生成漫画头像

DCGAN原理 DCGAN&#xff08;深度卷积对抗生成网络&#xff0c;Deep Convolutional Generative Adversarial Networks&#xff09;是GAN的直接扩展。不同之处在于&#xff0c;DCGAN会分别在判别器和生成器中使用卷积和转置卷积层。 它最早由Radford等人在论文Unsupervised Re…

【STM32开发之寄存器版】(四)-独立看门狗IWDG

一 、前言 独立看门狗简介&#xff1a; STM32F103ZET6内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障。 独立看门狗主要性能&#xff1a; 自由运行的递减计数器时钟…

【C++11】C++11的新语法

文章目录 统一的列表初始化std::initializer_list 变量类型推导autodecltype STL中的一些变化 统一的列表初始化 在C98中&#xff0c;标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 C11扩大了用大括号括起的列表(初始化列表)的使用范围&#xff0c;使其…

在 MySQL 中处理和优化大型报告查询经验分享

在 MySQL 数据库的使用过程中&#xff0c;我们经常会遇到需要生成大型报告的情况&#xff0c;这些查询可能涉及大量的数据和复杂的计算&#xff0c;对数据库的性能提出了很高的要求。 一、问题背景 大型报告查询通常具有以下特点&#xff1a; 数据量大&#xff1a;涉及大量的…