当前位置: 首页 > news >正文

C语言(十六)函数综合(二)递归 --- 辩论赛经验谈

最近忙着打“新生杯”辩论赛,嘿嘿!!!我们打进四强了。😀

哥的丑照(陈词立论环节):👉

麻了,边紧张边憋笑!!!

忙里偷闲,又来给大家更新文章了。

————————前情提要:👉————————

https://blog.csdn.net/2401_87025655/article/details/142734872

—————————你将收获:👉———————

递归!   是递归!!   还是递归!!!

  • “地龟”是啥,能吃吗?(递归的定义)
  • 如何理解递推与回归
  • 递归的示例
  • 递归的应用
  • 打人生中第一场正式辩论赛经验谈

——————额外收获(穿插在其中):👉—————

  • 高数题一道

 一、递归的定义

递是递推,归是回归,递归是“地龟”,嘿嘿。

递归的定义 --- 程序调用自身的技巧;

递归的作用 --- 把大型复杂问题化成重复的小问题解决。

递归的限制条件 --- 如下:

  • 递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续。
  • 每次递归调⽤之后越来越接近这个限制条件。

二、如何理解递推与回归

1、“递推” --- 前一个执行,带动后一个执行

形象理解👉  1.1多米诺骨牌 --- 一个倒了,后面也跟着倒了

不形象的理解👉 1.2高数题一道(不看也行)

 2、“回归” --- 返回值

如果把递推比作由上级向下级逐级分配任务,那么回归就是由下级往上级逐级反馈工作效果。

 三、递归的示例

 1、计算 n!

已知

1!= 1 ,

2!= 1 * 2,

3! = 1 * 2 * 3,

······

求 n!

当然,用循环很容易解决,递归可能在本题没什么竞争力。

我们暂且用本题理解一下递归的思路。

1.1递推思路举例👉 

5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1

1.2递推图示理解👉

1.3回归图示理解 👉

注:1!的结果给2!= 2 * 1!,2!的结果给3!= 3 * 2!,······

总之,从上往下为递推,从下往上为回归;递推为分解(化大为小),回归为整合(从下往上返回结果)。 

 1.4代码示例👉

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
int fac(int x)
{if (x > 0){return x * fac(x - 1);}elsereturn 1;
}
int main()
{int n = 5;int ret = fac(n);printf("%d", ret);return 0;
}

 1.5综合图示👉

2、顺序打印⼀个整数的每⼀位 

输⼊⼀个整数m,打印这个按照顺序打印整数m的每⼀位。
⽐如:
输⼊:1234 输出:1 2 3 4
输⼊:520 输出:5 2 0 

当然,用循环也可以解决,此处我们尝试用递归来解。

2.1思路图示👉

2.2代码示例👉 

#include <stdio.h>void Print(int n)
{if (n <= 9){printf("%d ", n);}else{Print(n / 10);printf("%d ", n % 10);}
}int main()
{int n = 0;printf("请输入,你要打印的数字:>");scanf("%d", &n);Print(n);return 0;
}

 2.3代码示例(简化版)👉

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
void Print(int n)
{if (n > 9){Print(n / 10);}printf("%d ", n % 10);
}int main()
{int n = 0;printf("请输入,你要打印的数字:>");scanf("%d", &n);Print(n);return 0;
}

2.4运行结果👉

请输入,你要打印的数字:>12345
1 2 3 4 5

四、递归的应用

1、求第n个斐波那契数

斐波那契数列(Fibonacci sequence),又称黄金分割数列, 斐波那契数列是一个数字序列,其中每个数字是前两个数字的总和,其数值为:1、1、2、3、5、8、13、21、34……

1.1思路👉 

因为从第三个斐波那契数列开始每一个数都是前两个数字之和,所以,我们很容易得到公式:👉 

这个斐波那契数列是怎么”递推“出去的呢?

如果前一个执行,那么后一个执行,依次递推出去。 

 1.2代码示例👉

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
int fib(int x)
{if (x > 2){return fib(x - 1) + fib(x - 2);}else{return 1;}
}int main()
{int n = 0;scanf("%d", &n);int ret = fib(n);printf("%d", ret);return 0;
}

1.3运行结果示例👉

10
第10个斐波那契数为55

 1.4补充:其它解法的拓展👉

int Fib(int n)
{int a = 1;int b = 1;int c = 1;int i = 0;for (i = 3; i <= n; i++){c = a + b;a = b;b = c;}return c;
}

2、小乐乐跳台阶

小乐乐上课需要走台阶,因为他腿比较长,所以每次可以选择走一阶或两阶,那么他一共有多少种走法?

输入描述:

输入一个整数n(1 ≤ n ≤ 30),表示台阶数

输出描述:

输出一个整数,即小乐乐可以走的方法数

2.1思路分析👉 

  • 当 n =1 时,显然只有一种走法;n = 2 时,有1阶+1阶和直接2阶两种走法。
  • 当 n > 2 时,假设有10个台阶        (n为假设的台阶数)。那么第一步走了1阶,还剩9阶;走了2阶,还剩8阶。   
  • 也就是说,如果对于n阶台阶,如果小乐乐第一步走一阶,则走法种数只需要考虑剩下的 (n - 1)阶;如果小乐乐第一步走两阶,则走法种数只需要考虑剩下的 (n - 2)阶。

2.2代码示例👉 

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int fib(int n)
{if (n <= 2){return n;}else{return fib(n - 1) + fib(n - 2);}
}int main()
{int n = 0;scanf("%d", &n);int m = fib(n);printf("%d阶台阶的走法有%d种\n",n, m);return 0;
}

2.3运行结果👉

4
4阶台阶的走法有5种

五、打人生中第一场正式辩论赛经验谈 

 1、要先与队友构建逻辑链,再写稿;

 2、一辩稿:定义+判准+总论点(如:XXX利大于弊)+两到三个分论点

 3、各辩位主要任务:一是攻击对方的论,二是推自己的论。(队友之间相互合作,沿着已经构建好的逻辑链进行推己方的论 ---- 两个论点的话,就是把论一和论二推完)

 4、有效攻防点:如果要抓住某个点作为得分点,注意要-----除了抛问、质疑,还要进一步阐释,并回归到己方的论/逻辑链。

 5、思路要清晰

各辩位要明确己方已经在与对方辩论的过程中打下了哪些战场(争辩的点),配合清晰的  “行为”,如:“驳”、“结”、“问”······

如:盘问后的小结可以说:“在刚才的辩论中,我方与对方辩友打成了XX共识”

这样做是为了让评委知道你在做什么,加印象分和技巧分。

 6、盘问

有时候不要直白地问,套上情景再去问。

 7、气势不能输!!!

祝大家人生中第一场辩论都能交出满意的答卷,当然,享受过程,不必在乎结果。


http://www.mrgr.cn/news/56565.html

相关文章:

  • 15分钟学Go 第2天:安装Go环境
  • BurpSuite渗透工具的简单使用
  • 性能测试能不能做好,要看你有没有性能测试思维
  • 代购系统:商品详情的“时空穿越者”
  • Grid Designer 网格设计师
  • AI编程新纪元:Cursor与V0引领的技术变革
  • vite.config.js配置路径别名@
  • windows DLL技术-DLL概述
  • MOE混合专家模型总结(面试)
  • IIC通信与MAX30102采集血样数据+V4L2框架
  • 计算机毕业设计Python+Spark知识图谱课程推荐系统 课程用户画像系统 课程大数据 课程爬虫 课程大屏 mooc慕课推荐系统 大数据毕业设计
  • 基于 Hugo 的静态响应式网址导航主题
  • GIT常用操作及多人提交代码的工作流程
  • 如何在Windows上配置Elasticsearch 7监听所有IP地址
  • 软件开发术语(F开头)---持续更新
  • 波浪理论、江恩理论、价值投资的结合
  • 【问题解决】C++调用shared_from_this()报错bad_weak_ptr解决方案
  • 《吉林大学学报(理学版)》
  • 增量编码器和绝对编码器的原理介绍
  • 解决Eclipse中’Run As’菜单缺少’Run on Server’选项的问题
  • MySQL9.0安装教程zip手动安装(Windows)
  • 嵌入式大厂物联网(IoT)高频面试题及参考答案
  • 逐行讲解transformers中model.generate()源码
  • 每天五分钟深度学习:逻辑回归和神经网络
  • MyBatis-Plus 代码生成器
  • java--多态(详解)