一道题

本文探讨了如何将N个鸡蛋放入M个篮子中的算法问题,确保任意数量的鸡蛋都能通过组合篮子里的鸡蛋数量来表示。文章提供了一种递归算法实现,并介绍了二进制编码思想在解决此问题的应用。

N个鸡蛋放到M个篮子中,篮子不能为空,要满足:对任意不大于N的数量,能用若干个篮子中鸡蛋的和表示。写出函数,对输入整数N和M,输出所有可能的鸡蛋的放法。

 

 

1.先取M个蛋放入M个篮子(一个篮子一个蛋)
2.剩下的(N-M)个蛋按照1,2,4,。。方式依次维持各个篮子中蛋的数量(要有一个篮子保持只有一个蛋),若最后的蛋不是2的方次,有多少放入一个篮子
3.取L(L<=N)个蛋时,应按二进制编码值考虑,如13个蛋:13的二进制码值是1101,则取有8个、4个和1个蛋的篮子即可。
另外:题目不完整,N与M应该有数量关系:M<=N且N<2的M次方

好的!下面是一道新的 **C++ 递归算法题目**,适合巩固对递归和分治思想的理解。 --- ## 🧩题目:求解斐波那契数列的第 n 项(递归实现) ### 题目描述: 斐波那契数列定义如下: - F(0) = 0 - F(1) = 1 - F(n) = F(n - 1) + F(n - 2), 当 n ≥ 2 请使用**递归算法**编写一个函数 `fibonacci(int n)` 来计算斐波那契数列的第 `n` 项。 ### 示例输入输出: | 输入 | 输出 | |------|------| | 0 | 0 | | 1 | 1 | | 5 | 5 | | 7 | 13 | --- ### ✅ 解思路: 这是一道经典的递归入门。虽然递归版本效率不高(存在大量重复计算),但非常适合理解递归的基本结构: - 基本情况(base case): - 如果 `n == 0`,返回 0; - 如果 `n == 1`,返回 1; - 递归情况(recursive case): - 返回 `fibonacci(n - 1) + fibonacci(n - 2)` --- ### 💻 C++ 实现代码如下: ```cpp #include <iostream> using namespace std; // 递归函数:计算斐波那契数列第 n 项 int fibonacci(int n) { // 基本情况 if (n == 0) return 0; if (n == 1) return 1; // 递归调用 return fibonacci(n - 1) + fibonacci(n - 2); } // 主函数测试样例 int main() { int n; cout << "请输入一个整数 n(n >= 0): "; cin >> n; if (n < 0) { cout << "输入无效,请输入非负整数!" << endl; } else { cout << "斐波那契数列第 " << n << " 项是:" << fibonacci(n) << endl; } return 0; } ``` --- ### 🔍代码解释: - 函数 `fibonacci` 使用了两个递归调用来完成任务; - 每次递归都在将问规模缩小; - 最终通过 base case 终止递归; - 在主函数中,程序读取用户输入并输出对应的结果。 --- ### ❗注意: 递归方式虽然直观,但时间复杂度为 **O(2^n)**,效率非常低。对于较大的 `n`(如 `n > 30`),运行速度会明显变慢。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值