算法题:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第 4 3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。

简介: 算法题:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第 4 3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第 4 3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 5 问第一个人,他说是10岁。请问第五个人多大?


为了解决这个问题,我们可以使用两种不同的算法思路:递归和迭代。首先,我们明确问题的逻辑:每个人的年龄都是基于前一个人的年龄加2岁来确定的,从第一个人开始,他是10岁。


C语言实现


算法一:递归


c复制代码
 #include <stdio.h>  
 
   
 
 // 递归函数,计算第n个人的年龄  
 
 int getAge(int n, int firstAge) {  
 
     if (n == 1) {  
 
         return firstAge;  
 
     } else {  
 
         return getAge(n - 1, firstAge + 2);  
 
     }  
 
 }  
 
   
 
 int main() {  
 
     int firstPersonAge = 10; // 第一个人的年龄  
 
     int fifthPersonAge = getAge(5, firstPersonAge); // 计算第五个人的年龄  
 
     printf("第五个人的年龄是:%d岁\n", fifthPersonAge);  
 
     return 0;  
 
 }



算法二:迭代


c复制代码
 #include <stdio.h>  
 
   
 
 int main() {  
 
     int firstPersonAge = 10; // 第一个人的年龄  
 
     int age = firstPersonAge; // 当前计算的年龄  
 
     for (int i = 2; i <= 5; i++) {  
 
         age += 2; // 每个人的年龄都是前一个人的年龄加2  
 
     }  
 
     printf("第五个人的年龄是:%d岁\n", age);  
 
     return 0;  
 
 }


Python实现


算法一:递归


python复制代码
 def get_age(n, first_age):  
 
     if n == 1:  
 
         return first_age  
 
     else:  
 
         return get_age(n - 1, first_age + 2)  
 
   
 
 first_person_age = 10  
 
 fifth_person_age = get_age(5, first_person_age)  
 
 print(f"第五个人的年龄是:{fifth_person_age}岁")




算法二:迭代


python复制代码
 first_person_age = 10  
 
 age = first_person_age  
 
 for i in range(2, 6):  # 从第2个人开始,到第5个人  
 
     age += 2  
 
 print(f"第五个人的年龄是:{age}岁")


以上是使用C语言和Python分别通过递归和迭代两种算法来解决这个问题的示例代码。递归方法通过函数调用自身来解决问题,而迭代方法则通过循环来逐步解决问题。在这个特定的问题中,由于我们只需要计算到第五个人,所以递归和迭代在性能上的差异并不明显,但在处理更复杂或更深层次的递归时,迭代方法通常更为高效和稳定。

image.png

相关文章
|
3月前
1044 火星数字 (20 分)
1044 火星数字 (20 分)
|
4月前
春晚刘谦第二个魔术原理讲解
春晚刘谦第二个魔术原理讲解
50 2
拯救地球精英答案【逻辑题】
拯救地球精英答案【逻辑题】
59 0
(第21列)C语言典型题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
(第21列)C语言典型题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
(第21列)C语言典型题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
|
物联网 机器人 智能硬件
数字商圈有什么用?江湖之中武林之外有三位高人这么说……
数字商圈有什么用?江湖之中武林之外有三位高人这么说……
164 0
|
编解码 人工智能 文字识别
连百年梗图都整明白了!微软多模态「宇宙」搞定IQ测试,仅16亿参数
连百年梗图都整明白了!微软多模态「宇宙」搞定IQ测试,仅16亿参数
149 0
|
测试技术
(dfs)(枚举)第十四届蓝桥杯第三次模拟赛:9.最大滑雪长度
(dfs)(枚举)第十四届蓝桥杯第三次模拟赛:9.最大滑雪长度
120 0
|
Java
Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
156 0
部落是一个魔法部落,部落中一共有n+1个人,小Biu是魔法部落中最菜的,所以他的魔力值为1,魔法部落中n个人的魔法值都不相同,第一个人的魔法值是小Biu的3倍,第二个人的魔法值是第一个人的3倍,以此类推。 现在小Biu想知道整个部落的魔法值和是多少?由于答案比较大,请把答案对1e9+7取模之后输出
部落是一个魔法部落,部落中一共有n+1个人,小Biu是魔法部落中最菜的,所以他的魔力值为1,魔法部落中n个人的魔法值都不相同,第一个人的魔法值是小Biu的3倍,第二个人的魔法值是第一个人的3倍,以此类推。 现在小Biu想知道整个部落的魔法值和是多少?由于答案比较大,请把答案对1e9+7取模之后输出
119 0
L2-029 特立独行的幸福 (25 分)(数组模拟)
L2-029 特立独行的幸福 (25 分)(数组模拟)
119 0