腾讯面试真题(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,递归就会结束。

相关推荐
wabs66616 分钟前
关于单调栈【力扣503.下一个更大元素II的思考】
算法·单调栈
weedsfly18 分钟前
前端开发中的代理模式——从 Vue 3 响应式到日常开发
前端·javascript·面试
c2385620 分钟前
下篇:伸缩魔法!进阶吃透可变滑动窗口篇
c++·算法
txzrxz25 分钟前
关于二维/多维前缀和
算法
来一碗刘肉面29 分钟前
顺序表的按值查找
数据结构·c++·算法
咖啡八杯30 分钟前
GoF设计模式——状态模式
java·面试·架构
尘世中一位迷途小书童1 小时前
Cesium 涟漪扩散点:自定义材质,参数调对了才好看
前端·面试
zzz_23681 小时前
【Java实习面试算法冲刺】图论
java·算法·面试
大鱼>1 小时前
宠物监控数据安全与隐私保护:端到端加密与合规实践
人工智能·深度学习·算法·iot·宠物
被自己蠢哭1 小时前
BFS广度优先搜索问题:#P00496. 华为od机试—自动泊车
算法