初识C语言:函数详解(二)

文章介绍了递归的概念,作为程序设计中的重要技巧,递归是解决问题的有效方法。文中通过计算n的k次方和求斐波那契数列展示了递归和迭代的对比,强调在效率上迭代可能更优,并给出了递归可能导致重复计算的问题。此外,还提及了两个经典的递归问题——汉诺塔和青蛙跳台阶。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数还有很重要的一个板块没有和友友们介绍,这个知识点就是递归。希望我的文章可以带来帮助。

1. 什么是递归

程序调用自身的编程技巧称为递归。

递归作为一种算法在程序设计语言中广泛应用。是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

同时递归只需少量的程序就可描述出解题过程所需要的多次重复计算,大大减少程序的代码量。

递归的主要思考方式在于:把大事化小

 2. 递归的两个必要条件

(1)存在限制条件,当满足这个限制条件的时候,递归便不再继续。

(2)每次递归之后越来越接近这个限制条件。

3. 实例

输入n和k通过函数递归实现计算n的k次方。

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int fac(int x, int y)
{
	while (y != 0)
	{
		if (y >= 2)
		{
			return x * fac(x, y - 1);
		}
		else
		{
			return x;
		}
	}
}
int main()
{
	int n = 0;
	int k = 0;
	scanf("%d %d", &n, &k);
	int num = fac(n, k);
	printf("%d", num);
	return 0;
}

这段代码就很好的体现了递归把大事化小的思考方式,计算n的k次方可以看成n乘以n的k-1次方,这样就可以通过函数递归来实现了 。

4. 递归与迭代

有许多问题是可以使用递归的形式进行解释的,这是因为它比非递归的形式更加清晰而且递归更加简洁。但是这些问题往往使用迭代的方式要比递归的方式效率更高。举例如下:

求第n个斐波那契数

 递归方式:

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

但是有一个问题当我们输入n的数字大一点的时候它并没有立刻出现结果,假设我输入n=60的时候:

59f344243e1e47189bd0bc33723a7825.png

 这是因为数字过大的时候我们会重复计算很多种数值图解如下:

93eb39f2740b45a5ac77ba088f1d8e9a.png

 所以对代码进行一些改进,非递归方式:

//非递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int fac(int x)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (x >= 3)
	{
		c = a + b;
		a = b;
		b = c;
		x--;
	}
	return c;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int num=fac(n);
	printf("%d", num);
	return 0;
}

这样问题就可以解决了:

39efd25e63c942f28c7bea4479d3baf6.png

 所以在使用递归的时候要适度,不要钻牛角尖哦!

34aacfe9f07b4a0f87e83d05c3f4bbac.png

 

今天分享到这里,希望大家一起提高!

 

### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值