腾讯面试真题(C语言)

一.题目

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

二.题目剖析

首先题目要求不能用乘除,那么(首相+末项)*项数/2就不能用,其次不能用循环,最后不能用条件语句,开关语句和条件运算符,那么想要求一个位置长度的数列和就一定要让操作数"动起来",想来想去也就只有递归还能试一试了,但递归要有限制条件,不过这个条件不能用条件语句和条件运算符来表现,那么只能想想其他的逻辑运算符,好像也只有用逻辑运算符的短路特性,才能限制递归。

三.代码实现

cpp 复制代码
static int a = 0;
int fun(int n)
{
	int x = (n) && (fun(n - 1));
	return a += n;;
}
int main()
{
	int n;
	scanf("%d", &n);
	printf("%d", fun(n));
	return 0;
}

四.代码剖析

首先定义一个全局变量a(或者在函数内部定义一个静态变量a),这两种做法都行,目的是为了防止函数在被调用完一次后变量a被初始化,然后利用逻辑与运算短路的特性(如果左操作数为0,将不再计算右操作数),这样如果把递归式放到右操作数,这样如果左操作数为0,递归就会结束。

相关推荐
北域码匠3 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
指掀涛澜天下惊3 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
乌萨奇也要立志学C++3 小时前
【洛谷】kmp算法
开发语言·算法
禹凕3 小时前
Dijkstra算法详解与应用
python·算法
YaraMemo4 小时前
元启发式算法框架
人工智能·算法·5g·信息与通信·启发式算法·信号处理
weixin_307779134 小时前
一维无粘 Burgers 方程的激波形成问题:MacCormack 格式求解
c++·算法·matlab
HugoStudio_SWAN5 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全
枫叶林FYL6 小时前
【群体智能集群控制工程实践】第3章 一致性协同算法
算法
禹凕6 小时前
滑动窗口算法实战指南
python·算法
DisonTangor6 小时前
【腾讯混元雪耻归来】 Hy4 preview:770B 参数 MoE 旗舰模型,1M 上下文全面开源
人工智能·算法·开源·aigc·腾讯云·腾讯云ai代码助手