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

【c语言初阶】函数_递归和迭代

前言:

内容:

n的阶乘的公式,什么情况,怎么没有听懂

我咋知道n的阶乘公式啊

就是这个,老师说知道n的阶乘公式就容易写递归函数了,算了没阿关系

n!(fac(n))
1  ,n<=1
n*fac(n-1)
计算n的阶乘 ,循环的方式 
int fac(int n)
{
	if(n <= 1)
		return 1;
	else
		return n*fac(n-1);
 } 

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = fac(n);
	printf("%d", ret);
	return 0;
 } 

可以用循环的方式写

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

用函数的方式写递归,主要写功能

很奇怪,就是主函数里的for循环里的变量,出了作用域还没有失效,就是出了for循环,他还将值带出来了,难道我对作用域了解的还是不够清楚,在去了解一下

int fac(int n)
{
	int i = 0; //将功能所用到的变量都初始化 
	int ret =1;
	for(i=1; i <= n; i++)  //这就是功能里的变量,然后就是要初始化这里的 
	{
		ret = ret * i;
	}	
	return ret; 
}

斐波那契数列,这个我还不知道是什么意思

就是求数列,不晓得,麻烦,就是猜解一个数字,直到那个数字为1,或者是2,2就是1,

然后把1全部加起来

这里需要考虑的是,就是自定义函数定义的count,如果要打印的话,这个就需要是全局变量,但是放到主函数,自定义函数又找不到,所以就放到了最上面

用递归的方法表示为

#include <stdio.h>

int count = 0;
//利用递归求解斐波那契数列
int Fib(int n)
{
	if(n ==3)
		count++;
	if(n<=2)
		return 1;
	else
		return Fib(n-1) + Fib(n-2);
 } 

int main()
{
	int n = 0;
	scanf("%d", &n);
	int relt = Fib(n);
	
	printf("%d\n", relt);
	printf("%d\n", count);
	
	return 0;
 } 

用迭代的方式解决斐波那契数列

就是有一定的规律的

1 1 2 3 5 8 13 21 34 55
a b c   //第一次
  a b c   //第二次,就是需要把上面的的b赋值到a,然后c赋值到b
          //然后加起来,就是第二次的c了,然后反复循环就可以了

就是钱前两个数加起来的和,就是后面的数了

也就是说前面两个数是确定的,然后就是c = a+b

然后就需要改变a,b的值,

用的for循环,好像也可以,都是从3开始的,然后就是3循环1次,4循环两次

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

int main()
{
	int n = 0;
	scanf("%d", &n);
	int m = Fib(n);
	printf("%d", m);
	return 0;
}

相关文章:

  • 计算机专业知识【深入理解 IP 地址与子网掩码:从 /27 到不同 CIDR 表示】
  • PyTorch 源码学习:Dispatch Autograd Operators
  • 《炒股养家心法.pdf》 kimi总结
  • 京东cfe滑块 分析
  • 在VSCode中接入deepseek
  • 优化YOLOv8:如何利用ODConv卷积解决复杂背景下的目标识别问题
  • 为什么要用 const 和 let,而不是 var?
  • Solon Cloud —— 介绍
  • Pytorch实现之GIEGAN(生成器信息增强GAN)训练自己的数据集
  • The First项目报告:重塑链上游戏生态,解读B3 Base的双赢局面
  • 操作系统研究
  • 新版Tomcat MySQL IDEA 安装配置过程遇到的问题
  • Linux----线程
  • ES6箭头函数:从基础到进阶指南
  • 【Pandas】pandas Series reset_index
  • 如何在 SpringBoot 项目使用 Redis 的 Pipeline 功能
  • Spring Boot接收参数的19种方式
  • 【JAVA:list中再定义一个list对象,循环赋值不同的list数据,出现追加重复数据问题】
  • 跟着柳叶刀数字健康,学习如何通过病理切片预测分子分类对预后的影响|项目复现
  • 我是如何从 0 到 1 找到 Web3 工作的?
  • 兰州做网站的公司/佛山网站建设十年乐云seo
  • 郴州网站优化公司/无锡seo公司哪家好
  • ps网站导航制作/快速排名seo软件
  • 个体户能做网站备案吗/网络推广营销策划方案
  • 做网站找云无限/网络营销课程个人总结
  • 西安 餐饮 网站建设/东莞百度搜索优化