初阶C-1107

2024-01-05 23:58
文章标签 初阶 1107

本文主要是介绍初阶C-1107,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这次的初阶都是跟C语言中的递归有关的。可以说递归是一个不好理解的,比较抽象的东西。

递归(Recursion),指在函数的定义中使用函数自身的方法,即程序的自身调用。

递归就是方法里调用自身。

但是递归的缺陷也是非常大的。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

1.递归和非递归分别实现求第n个斐波那契数。

//利用了递归
int Fibonacci(int n){if (n == 1 || n == 2){return 1;}return Fibonacci(n - 1) + Fibonacci(n - 2);
}
//不使用递归
void Fib(int n){int j = 1, k = 1, sum = 0;if (n == 1 || n == 2){return 1;}if (n % 2 == 0){for (int i = 1; i < n / 2; i++){j += k;k += j;}printf("%d", k);}else if(n % 2 == 1){for (int i = 1; i <= n / 2; i++){j += k;k += j;}printf("%d", j);}
}

2.编写一个函数实现n^k,使用递归实现.

//n^k  如果调用递归,我们先拆分这个算式
//			n^k=1,k=0;n^k=n*n^(k-1),k>0
double index(double n,double k){if (k == 0){return 1;}return n*index(n, k - 1);
}

3.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19.

int DigitSum(int n){int m = 0;int sum = 0;if (n != 0){m = n % 10;n = n / 10;sum = m + DigitSum(n);}return sum;
}

4.递归和非递归分别实现strlen.

int Strlen(const char*str){if ('\0' == *str){return 0;}return 1+Strlen(str + 1);//这里的+1可以理解成每次进行拆分去算//比如“abcd” 先为“a”+“bcd”,第二次在为“b”+“cd”,以此类推
}int Strlen2(char str[]){int size = 0;while (str[size] != '\0'){size++;}return size;
}

5.递归和非递归分别实现求n的阶乘 .

void Fac(int n){int j = 1;if (n == 1){return 1;}for (int i = 1; i <= n; i++){j *= i;}printf("%d", j);
}int Fac1(int a){if (a == 1){return 1;}return a*Fac1(a-1);
}

6.递归方式实现打印一个整数的每一位.

int PrintfNum(int n){if (n > 9){printf("%d",PrintfNum(n / 10);}printf("%d", n % 10);//逆序实现,非递归//while (n){//	m = n % 10;//	n = n / 10;//	printf("%d", m);//}}

本次就结束了,还有一个利用递归进行逆序的题,我觉得这道题很不好理解。我将专门写一篇关于这道题目的文章。

递归的思想是很重要的。我们可以想象成电影《盗梦空间》,一层接着一层的梦境,就好比我们的递归不断的往下进行,只有上一层完成后,才可到下一层。多加练习,多思考,一定会掌握的。

这篇关于初阶C-1107的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/574574

相关文章

JAVAEE初阶第七节(中)——物理原理与TCP_IP

系列文章目录 JAVAEE初阶第七节(中)——物理原理与TCP_IP 文章目录 系列文章目录JAVAEE初阶第七节(中)——物理原理与TCP_IP 一.应用层重点协议)1. DNS2 .NAT3. NAT IP转换过程 4 .NAPT5. NAT技术的缺陷6. HTTP/HTTPS7. 自定义协议 二. 传输层重点协议 1 .UDP协议 2.1.1 UDP协议端格式 2.1.2 UD

【C++】:模板初阶—函数模板|类模板

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山岗! 💫 欢迎来到我的学习笔记! 本文参考博客:一同感受C++模版的所带来的魅力 一、泛型编程思想 首先我们来实现一个swap交换函数。如果学过了C++的函数重载和引用的话,就可以写出swap函数不同参数类型的重载函数。(注意:C语言中不支持重名函数的!) void Swap(in

【数据结构初阶】链表分类与双向带头循环链表接口实现

文章目录 1. 链表的分类2. 双向带头循环链表接口实现2. 1 结点声明2. 2 创建链表节点2. 3 初始化链表2. 4 打印链表2. 5 尾插2. 6 判空2. 7 尾删2. 8 头插2. 9 头删2. 10 查找2. 11 在指定位置删除与插入2. 12 销毁 3. 链表接口测试4. 单链表与双链表5. 顺序表与链表 1. 链表的分类 链表的结构非常多样,以下情况组合

【JavaEE初阶】多线程(1)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 并发编程  线程 与 进程 创建线程 写法1  写法2 写法3 写法4 写法5 Thread类的常见构造方法 前台/后台 线程 并发编程  并发编程: 通过写特殊的代码 把多个cpu的核心都利用起来  多进程编程就是一种典型的并发编程 ,但多进程编程最大的问题是 进程太'重'了(创建进程/销

JAVAEE初阶第六节——网络编程套接字

系列文章目录 JAVAEE初阶第六节——网络编程套接字 文章目录 系列文章目录JAVAEE初阶第六节——网络编程套接字 一. 网络编程基础1. 为什么需要网络编程2. 什么是网络编程3.网络编程中的基本概念 3.1 发送端和接收端 3.2 请求和响应 3.3 客户端和服务端 4. 常见的客户端服务端模型 5. TCP和UDP特点上的差别(初识) 二.Socket套接字 1. 概

数据结构____二叉树初阶

一:二叉树的基本概念和性质 1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。 2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的点一一对应时称之为完全二叉树

【JavaEE初阶】JVM内存划分和类加载过程以及垃圾回收

目录 🌲内存划分 🚩堆(线程共享) 🚩栈 🚩元数据区 🍃类加载过程 🚩双亲委派模型 🎄垃圾回收机制(GC) 🚩找到谁是垃圾(不被继续使用的对象) 🚩释放对应的内存 🏀标记-清除 🏀复制算法 🏀标记-整理 🏀分代回收 🌲内存划分 JVM也就是Java进程,这个进程一旦跑起来之后,就会从操作系统这里,申请一大块内存空间,JVM接下来就要进一

C++竞赛初阶L1-15-第六单元-多维数组(34~35课)551: T456501 计算矩阵边缘元素之和

题目内容 输入一个整数矩阵,计算位于矩阵边缘的元素之和。 所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。 输入格式 第 1 行包含两个整数,分别为行数 m 和列数 n,两个整数之间空格隔开。 第 2 行开始有 m 行数据,每行包含 n 个整数,整数之间空格隔开。 输出格式 对应矩阵的边缘元素和。 样例 1 输入 3 33 4 13 7 12

C ++初阶:类和对象(中)

目录 🌞0.前言 🚈1. 类的6个默认成员函数 🚈2. 构造函数 🚝2.1 概念 🚝2.2特性 🚝2.3编译器默认生成的构造函数。 ✈️补充1:  ✈️补充2:开空间问题 🚈3. 析构函数 🚝3.1概念 🚝3.2 特性 🚝3.3编译器默认生成的析构函数。 🚝3.4补充 🚈4. 拷贝构造函数 🚝4.1概念 🚝4.2 特征  🚝4.3

安全技术学习路线图 初阶+中阶+高阶

一、报告名称     安全技术学习路线图 二、作者     奇安信安全开发专家组:韩鹏 | 李常坤 | 汪列军 | 刘洪亮 | 张钊 | 陈大钊 | 叶盛 | 章磊 | 白子潘 | 覃永靖 三、若需要pdf版本     关注"元宇宙最新报告",回复关键词“安全技术学习路线图”,获取网盘免费下载链接。 如 源自CSDN 往期文章: