递归法解决小学数学吃桃问题

本文探讨了一个小学数学问题,即如何通过递归算法解决桃子换桃的数学模型。作者首先介绍了问题背景,指出在初始尝试中由于忽视了某些情况导致代码错误。随后,作者详细解释了问题的正确解决方案,即使用两个变量分别表示桃子和桃核的数量,并通过递归更新这两个变量来计算最多能吃到的桃子数。文章还提到扩展代码可以适应不同情境,提高了算法的通用性。
摘要由CSDN通过智能技术生成

问题:

有这样一个问题,去水果摊买桃子吃,吃完之后三个桃核可以再换一个桃子。
假如现在买了N个桃子,最多可以吃到几个桃子?

分析:

典型的递归解决问题。找出桃子数量、桃核数量和最终数量之间的关系,递归调用,便直接解决问题。

代码:

#include<iostream>
using namespace std;
int total = 0;
void com(int n,int m)        //n代表桃子数,m代表桃核数
{
	total += n;              //桃子总数
	if (n + m < 3)           //不够换一个桃子
		return;
	com(n / 3 , n % 3);      //递归
	
}
int main()
{
	int n;
	cin >> n;
	if (n < 3)               //开始桃子数量小于3,不够兑换桃子,输入数量即为总数
		total = n;
	else
		com(n,0);            //初始状态下桃核数量为0
	cout << total << endl;
	return 0;
}

我的思路刚开始是这样的:对桃子数量进行处理,也就是桃子吃完之后拿桃核换桃子,建立一个函数,对这个函数进行递归,便可以解决问题。代码写好之后自己想了几个测试用例试了一下,发现有问题。仔细分析之后发现自己太过马虎,将问题想的太简单了:比如说,刚开始3个桃子,吃完之后还可以再换一个࿰

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值