趣味算法------猴子吃桃(循环,递归双重解法)

题目描述

猴子第一天摘下若干个桃子,当天吃了一半,后面又多吃一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。后面每天猴子都吃了前一天剩下的一半零一个。到第十天想再吃时,只剩下一个桃子。求第一天共摘了多少桃子。

输入格式
无。

输出格式
一个整数。

解题思路:

这个题目可以使用递归求或者循环求和解出。

循环求和:

我们可以初始化 n 为最后一天的桃子数目 1,然后经过一次循环让n变成倒数第二天的桃子数目 n = 2*(n+1),重复循环9次得到最初的桃子数目。

递归求和:

因为我们知道当天的桃子数目为前一天的桃子数目加上1再乘以二倍。所以递归函数的返回值为 2*(fun(n-1)+1),fun(n)表示第n天的桃子数目,退出递归的边界条件为n==1时返回1。

具体代码:

循环方案代码:

复制代码
#include<stdio.h>
int main(void)
{

    int n = 1,i;
    for(i = 0;i<9;i++)
    {
        n = 2*(n+1);
    }

    printf("%d",n);
}

递归方案代码:

复制代码
#include<stdio.h>
int fun(int n)
{
    if(n == 1)
        return 1;
    return 2*(fun(n-1) + 1);
}
int main(void)
{
    printf("%d",fun(10));
}

总结:

解题的方法很简单,但是这道题反映了一个算法的经典的思想,已知结果求初始过程。

实则这道题也有其他的变种,比如老鼠藏奶酪问题。而且这道题也并不局限10天。

相关推荐
汀、人工智能17 小时前
[特殊字符] 第2课:字母异位词分组
数据结构·算法·链表·数据库架构··字母异位词分组
良木生香17 小时前
【C++初阶】:C++类和对象(下):构造函数promax & 类型转换 & static & 友元 & 内部类 & 匿名对象 & 超级优化
c语言·开发语言·c++
小O的算法实验室17 小时前
2026年SEVC,面向主动成像卫星任务规划问题的群体智能与动态规划混合框架,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
网安INF17 小时前
数据结构第一章复习:基本概念与算法复杂度分析
数据结构·算法
无巧不成书021818 小时前
C语言零基础速通指南 | 1小时从入门到跑通完整项目
c语言·开发语言·编程实战·c语言入门·零基础编程·c语言速通
幻风_huanfeng18 小时前
人工智能之数学基础:什么是凸优化问题?
人工智能·算法·机器学习·凸优化
三雷科技18 小时前
使用 `dlopen` 动态加载 `.so` 文件
开发语言·c++·算法
Yzzz-F18 小时前
Problem - 2146D1 - Codeforces &&Problem - D2 - Codeforces
算法
Kk.080218 小时前
力扣 LCR 084.全排列||
算法·leetcode·职场和发展
环黄金线HHJX.18 小时前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互