C++知识点总结(29):递归练习

一、满足条件的值

1. 审题

已知:S=1+2+4+7+11+16…S=1+2+4+7+11+16…S=1+2+4+7+11+16
递归求解刚好大于等于 500050005000SSS 的值。

2. 参考答案

#include <iostream>
using namespace std;

// 定义递归函数,计算第x个数的值
int f(int x)
{
   
   
    int r;
    if (x == 1) 
        r = 1; // 第一个数为 1
    else 
        r = f(x-1) + x-1; // 第 x 个数为第 x-1 个数加上 x-1
    return r;
}

int main()
{
   
   
    int s = 0, i = 1; // 初始化累加和 s 为 0,计数器 i 为 1
    while (s <= 5000) // 循环累加直到 s 大于 5000
    {
   
   
        s += f(i++); // 将第 i 个数的值累加到 s 上,并将 i 自增
    }
    cout << s; // 输出累加和
    return 0;
}

二、递归组合数

1. 审题

nnn 个物品里面选出 mmm 个物品的方案数,记为 C(n,m)C(n,m)C(n,m)。对于递归过程如下理解:假设 nnn 个物品里面有一个物品最特殊,挑选时 mmm 个物品时,这个特殊物品假定不需要挑选出来,此时要从 nnn 个物品里选出 mmm 个物品,就相当于要从 n−1n-1

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值