【CS61A】count_partition(整数划分)

问题描述:

问题描述

思路:

基本情况(Base case)

  • 当n = 0时, 仅有 0 = 0一种划分,返回1
  • 当n < 0时, 递归过界,返回0
  • 当k = 0时, 无法划分,返回0

递推方法(Recursive calls)

  • Q(n,m)=Q(n,m-1)+Q(n-m,m)
    等式右边第一部分Q(n,m-1)表示被加数不包含m的分划的数目,第二部分表示被加数中包含(注意不是小于)m的分划的数目,因为如果确定了一个分划的被加数中包含m,则剩下的部分就是对n-m进行不超过m的划分。

代码如下:

def count_partitions(n, k):
    """
    >>> count_partitions(5, 3)
    5
    >>> count_partitions(6, 4)
    9
    """
    if n == 0:
        return 1
    elif n < 0 or k == 0:
        return 0
    else:
        return count_partitions(n , k - 1) + count_partitions(n - k, k)

测试:

$ python3 -m doctest count_partiton.py -v
Trying:
    count_partitions(5, 3)
Expecting:
    5
ok
Trying:
    count_partitions(6, 4)
Expecting:
    9
ok
1 items had no tests:
    count_partiton
1 items passed all tests:
   2 tests in count_partiton.count_partitions
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

递归树:

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`esp_partition_find`是一个ESP-IDF中的函数,用于在ESP32芯片上查找指定分区类型的分区。ESP-IDF是Espressif Systems开发的ESP32开发框架。 该函数的原型如下: ```c const esp_partition_t* esp_partition_find(esp_partition_type_t type, esp_partition_subtype_t subtype, const char* label); ``` 它接受三个参数: 1. `type`:要查找的分区类型,例如`ESP_PARTITION_TYPE_APP`、`ESP_PARTITION_TYPE_DATA`等。 2. `subtype`:要查找的分区子类型,例如`ESP_PARTITION_SUBTYPE_APP_FACTORY`、`ESP_PARTITION_SUBTYPE_DATA_NVS`等。如果不需要指定子类型,则可以设置为`ESP_PARTITION_SUBTYPE_ANY`。 3. `label`:要查找的分区的标签(名称)。如果不需要指定标签,则可以设置为NULL。 该函数返回一个指向找到的分区结构体`esp_partition_t`的指针,如果未找到符合条件的分区,则返回NULL。 例如,要查找类型为`ESP_PARTITION_TYPE_APP`、子类型为`ESP_PARTITION_SUBTYPE_APP_FACTORY`的分区,可以使用以下代码: ```c const esp_partition_t* partition = esp_partition_find(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL); if (partition != NULL) { // 找到了符合条件的分区 } else { // 未找到符合条件的分区 } ``` 请注意,该函数只会在当前固件(固件表示当前运行的程序)中查找分区,不会涉及到Flash上的其他固件。如果需要操作Flash上的分区,请使用`esp_partition_iterator`相关函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值