一道腾讯面试题(使用递归、循环、数组实现上台阶方法)

一道面试题 - PHP 实现阶乘的若干方法 背景 前一阵子在面试腾讯 WXG 的高级 PHP 开发岗,其中一次面试留了道算法题,要求用尽可能多的方法实现 PHP 的阶乘,并对比各种方法的优劣。 最近所有面试都结束了,正好抽点时间写写博客,于是打算分享一下我的解题过程,后面抽空再分享 WXG 的七面面经。 解题 据本人了解,阶乘的实现方法一般可以分为三种,通常意义下的递归和循环各算一种,还有一大类通过一些巧妙的数学方法减少运算次数(尤其是乘法运算次数),进而优化计算效率。 如果要考虑到高精度、大整数的阶乘,对于 PHP 语言而言,情况会更复杂一些,比如 阅读详情

//一道腾讯面试题
//题目:有50个台阶,一次走一步或者两步,有多少种可能?


分析:
如果有一个台阶,则只有一种可能:1;
如果有两个台阶,只有两种可能:11或2;
如果有三个台阶,则有三种可能:111,12,21;
如果有四个台阶,则有五种可能:11111,1112,1121,1211,2111
因为第三个及其后面的台阶只能从前面一次走一步或者一次走两步走上来,则可知走到第三个台阶的可能性等于走上第一个台阶的可能性加上走上第二个台阶的可能性;走到第四个台阶的可能性等于走上第二个台阶的可能性加上走上第三个台阶的可能性;以此类推,走上第50个台阶的可能性等于走上第48个台阶的可能性加上走上第49个台阶的可能性。

代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

//任何循环都能转换为递归,但是递归不一定能转换为循环
int step(int steps)       //数值较大(台阶数目较多)计算较慢,例如50个台阶
{
	if (steps == 1)
	{
		return 1;
	}
	else if (steps == 2)
	{
		return 2;
	}
	else
	{
		return step(steps - 1) + step(steps - 2);
	}
}

//使用for循环
int tencent(int steps)
{
	if (steps == 1)
	{
		return 1;
	}
	else if (steps == 2)
	{
		return 2;
	}
	else
	{
		int step1 = 1;
		int step2 = 2;
		int step;

		for (int i = 3; i <= steps; i++)
		{
			step = step1 + step2;
			step1 = step2;
			step2 = step;
		}
		return step;
	}
}

//使用数组实现
int tencentSteps(int steps)
{
	int step[50];			//50,只是使用一个足够大的数
	step[0] = 1;
	step[1] = 2;

	for (int i = 2; i <= steps - 1; i++)
	{
		step[i] = step[i - 1] + step[i - 2];
	}
	return step[steps - 1];
}

void main()
{
	int key;
	scanf("%d", &key);

	printf("递归:有%d种方法\n", step(key));
	printf("循环:有%d种方法\n", tencent(key));
	printf("数组:有%d种方法\n", tencentSteps(key));

	system("pause");
}



星网锐捷语音网关密码重置全攻略:两种高效恢复出厂设置方法详解 本文详细解析了星网锐捷语音网关密码重置的两种高效方法,包括通过eth1通用口和eth0管理口的操作步骤。针对不同型号设备,提供硬件连接、Web控制台登录及CRT工具使用的具体指南,帮助用户快速恢复出厂设置并重建语音环境配置。 阅读详情

相关推荐

Go语言AI智能体开发实战:基于LangGraphGo构建下一代工作流引擎

在AI应用开发领域,工作流编排是构建复杂智能系统的核心技术。其核心原理是将任务执行过程建模为状态图,通过节点和边的组合定义数据流转路径,实现多步骤推理与工具调用的自动化。这种基于状态图的编程模型,为智能体提供了清晰的“思考-行动-观察”循环抽象,显著提升了复杂业务逻辑的可维护性和可观测性。从技术价值看,它解决了传统代码中状态分散、流程僵化的问题,支持条件分支、并行执行等高级模式,是实现生产级AI应用的关键基础设施。在应用场景上,该技术广泛适用于客服机器人、自动化审批、数据ETL等需要多步骤协调的领域。本文以

weixin_30457551的博客 361

面试题:小明爬楼梯,一次只能上1级或者2级台阶,一共有n级台阶,一共有多少种方法上台阶?python实现

在面试中遇到的一个题,现在记录下来解决办法。 如果有一级台阶,方法只有1种 如果有两级台阶,则有2种方法 当级数为n的时候有以下两种情况: 1、第n级台阶时是在n-1级上1级上来的 2、第n级台阶时是在n-2级上2级上来的 可以使用递归实现。 def upstairs(num): if num==1: return 1 if num==2: retu...

qq_41107910的博客 2万+

colmap+openMVS稠密重建

简要记录一下colmap+openMVS稠密重建相关使用。

weixin_41631106的博客 2243

C语言:走台阶问题(递归解法)

【代码】C语言:走台阶问题(递归解法)

2303_80025768的博客 3246

对工时评估的思考:当AI颠覆了coding效率

在AI时代,“人日”作为软件工时度量衡已然失效。开发的价值核心正从“编码实现”转向“深度思考”与“精准沟通”——即如何将人类的模糊需求精确地传达给AI。当最有价值的“思想工作”变得最难量化时,传统的项目管理范式随之动摇。我们必须超越对过程的算计,开始探索衡量思想、沟通与业务价值的新标尺。

架构师刘7的博客 1017

人像抠图 + OpenGL ES 还能这样玩?没想到吧(附带源码)

OpenGL ES 利用抠图算法实现人像留色。

字节流动 3万+

【C语言】递归问题(爬楼梯)

爬楼梯递归问题

debug... 1万+

哨兵1号回波数据(L0级)包格式解析与成像参数提取

提取哨兵1号数据包的辅助数据、回波数据、定标数据。matlab代码在文末

3126

递归入门(C语言实现)

总结: 要做好递归,就一定要做到“三个准”: 1.参数找准; 2.满足条件找准; 3.不可能条件找准。 参数找准,也就是找准递推递归关系;第二三点的“条件”,其实也就指的是“退出条件”。

m0_61019749的博客 546

保险还在等灾后报案?高精度气象开始提前计算“赔付风险”

【摘要】传统保险理赔模式正在向灾前风险管理转型,保险公司竞争焦点从"赔得快"转向"预判准"。文章提出构建气象保险风险指数(WRI),通过"气象危险度×资产暴露度×标的脆弱性"精准计算损失风险,实现从天气预报向"损失天气"的转变。核心观点包括:1)需关注气象要素的强度、持续时间和空间位置三维度;2)可视化系统应直接显示预期赔付热力图;3)需解决指数保险的基差风险问题,采用多源数据融合技术;4)理想平台需包含风险地图、损失热力图、灾

专注AI大模型,软件混淆,授权 53

【JCR一区级】鱼鹰算法OOA-CNN-LSTM-Attention故障诊断分类预测【含Matlab源码 5711期】

鱼鹰算法OOA-CNN-LSTM-Attention故障诊断分类预测 完整代码和数据,方可运行;数据可直接替换,适合小白!可提供运行操作视频!

订阅付费专栏Matlab(奶茶价版)或下载付费资源,可赠送奶茶价版付费专栏指定代码1份; 3601

递归+循环实现走台阶算法

编程题: 有n步台阶,一次只能上1步或2步,共有多少种走法? 递归 优点:大问题转小问题,可以减少代码量,同时代码精简,可读性好 缺点:递归调用浪费了空间,而且递归太深容易造成堆栈的溢出 循环迭代 优点:代码运行效率好,没有额外空间的开销 缺点:代码不如递归简洁,可读性较差 附上代码 package com.java_foundation.test_3; import org.junit.Test; /** * @program: java_...

机智W_en的博客 740

【已解决】飞牛nas(fnOS)异常断电导致硬盘未挂载(无法挂载),系统内部错误修复、救回数据全流程!(含更新系统后外接 NTFS 格式硬盘丢失的修复方法)

fnOS 飞牛NAS遭遇非正常断电后,存储空间显示「未挂载」或更新系统后外接 NTFS 格式硬盘丢失,点击挂载提示「系统内部错误」!💥 博主已经完美恢复,本文记录了相关的解决方案,帮您恢复或最大程度保住重要数据🎉

XiaoqiangClub的博客 2223

由一道腾讯面试题引发的关于递归函数使用的各种情况总结

一直有一个感受就是,当我们在某些问题抽象的定义解答时候感到疑惑是,不妨看一下具体问题的解答,更加有助于我们理解问题。首先看一下腾讯的一道招聘的测试题。        1、面试题是一道程序编程题,要求使用递归的方法生成一个N位长度的格雷码,对格雷骂的定义是,相邻的两个格雷码只有一位的数字有差别。首先看一看我写的关于该题目的C程序代码:#include "stdio.h" #include"std

wang_dong001的博客 1778

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

递归循环子组件_一道价值25k的腾讯递归组件面试题(Vue3 + TS 实现)

前言小伙伴们好久不见,最近刚入职新公司,需求排的很满,平常是实在没时间写文章了,更新频率会变得比较慢。周末在家闲着无聊,突然小弟过来紧急求助,说是面试腾讯的时候,对方给了个 Vue 的递归菜单要求实现,回来找我复盘。正好这周是小周,没想着出去玩,就在家写写代码吧,我看了一下需求,确实是比较复杂,需要利用好递归组件,正好趁着这个机会总结一篇 Vue3 + TS 实现递归组件的文章。需求可以先在 Gi...

weixin_35600779的博客 336

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

php 递归 上楼梯_一道面试题 - PHP 实现阶乘的若干方法

背景前一阵子在面试腾讯 WXG 的高级 PHP 开发岗,其中一次面试留了道算法题,要求用尽可能多的方法实现 PHP 的阶乘,并对比各种方法的优劣。最近所有面试都结束了,正好抽点时间写写博客,于是打算分享一下我的解题过程,后面抽空再分享 WXG 的七面面经。解题据本人了解,阶乘的实现方法一般可以分为三种,通常意义下的递归和循环各算一种,还有一大类通过一些巧妙的数学方法减少运算次数(尤其是乘法运算次数...

weixin_39816260的博客 221

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

php怎么求阶乘_一道面试题 - PHP 实现阶乘的若干方法

背景前一阵子在面试腾讯 WXG 的高级 PHP 开发岗,其中一次面试留了道算法题,要求用尽可能多的方法实现 PHP 的阶乘,并对比各种方法的优劣。最近所有面试都结束了,正好抽点时间写写博客,于是打算分享一下我的解题过程,后面抽空再分享 WXG 的七面面经。解题据本人了解,阶乘的实现方法一般可以分为三种,通常意义下的递归和循环各算一种,还有一大类通过一些巧妙的数学方法减少运算次数(尤其是乘法运算次数...

weixin_42439576的博客 1061

腾讯面试题:走到50台阶的可能数(台阶可以一次走一阶或者二阶),三种方式实现

//腾讯面试题,有50个台阶,一次走一步或者两步,有多少种可能 //走到50阶的可能是走到49阶的可能加上走上走到48的可能 //分析 /*     台阶数   可能数     1            1            直接走一个台阶就ok     2            2            走1 1或者直接走2个台阶     3            3

4007

php计算分数的阶乘,一道面试题 - PHP 实现阶乘的若干方法

背景前一阵子在面试腾讯 WXG 的高级 PHP 开发岗,其中一次面试留了道算法题,要求用尽量多的方法实现 PHP 的阶乘,并对比各类方法的优劣。php最近全部面试都结束了,正好抽点时间写写博客,因而打算分享一下个人解题过程,后面抽空再分享 WXG 的七面面经。laravel解题据本人了解,阶乘的实现方法通常能够分为三种,一般意义下的递归和循环各算一种,还有一大类经过一些巧妙的数学方法减小运算次数(...

weixin_42531579的博客 418

腾讯—最新iOS面试题总结

关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教。主要记录一下准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧。 腾讯 一面 1、介绍一下实习的项目,任务分工,做了哪些工作?介绍实习内容2、网络相关的:项目里面使用到什么网络库,用过ASIHTTP库吗3、断点续传怎么实现?需要设置什么?4、在杭州...

weixin_33896726的博客 1654

Java笔记 —— 递归,腾讯+字节+阿里面经真题汇总

递归: 方法定义本身调用方法本身的现象叫递归 方法嵌套:Math.max(Math.max(a,b),c); 这仅仅是方法的嵌套使用 递归的注意点: 递归一定要有一个出口,也就是结束条件,否则就是死循环。可以用System.exit(0);退出递归调用 递归的次数不能太多,否则就会发生内存溢出。因为每次递归都会占用一定的栈内存 构造方法不能递归使用 递归的思路: 第一件事,需要明确递归方法的功能。 比如说这个方法是要计算一个数的平方,是要计算两个数的和 第二件事,需要确定递归方法的停止

m0_64384350的博客 569

看到的面试题,请容我一道一道的解析(假以时日),希望大家留言一起探讨~

很经典的面试题,有Google,Microsoft等知名IT公司的面试题。让我们一起研究一起进步吧~

Avenger_Tao的专栏 2996

js实现数组扁平化(1),2024年最新前端web面试题

在面试前我花了三个月时间刷了很多大厂面试题,最近做了一个整理并分类,主要内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。HTML5新特性,语义化浏览器的标准模式和怪异模式xhtml和html的区别使用data-的好处meta标签canvasHTML废弃的标签。

2401_84139624的博客 568

一道腾讯算法题,拿好不谢~

今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题11.旋转数组的最小数字。在腾讯的算法面试环节出现频率较高,属于简单难度。 题目链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof 一、题目描述 把一个数组最...

墨鱼菜鸡 126
上一篇: 函数
下一篇: 进制转换
KnowBug
博客等级 码龄9年 8粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值