首页 > 编程语言 >函数f(m,n)算法设计

函数f(m,n)算法设计

时间:2022-09-04 17:56:56浏览次数:53  
标签:表示 return 函数 int 加数 算法 返回值 设计 ___

题目:

设m,n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。

例f(5,3)=5,有5种表示方式:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。

以下是该函数的程序段,请将未完成的部分填入,使之完整。

int f(int m, int n)
{
    if(m == 1)   return ___;
    if(n == 1)   return ___;
    if(m < n)   return f(m,m);
    if(m == n)     return 1 + ___;
	return f(m,n-1) + f(m-n,___);
}

解析:

我们先对已给出代码进行分析:

int f(int m, int n)   //定义f(m,n)函数,返回值表示方式的数目,返回值类型为整数.
{
    if(m == 1)   return ___;   //当m=1时,显然1只能分解为1+0,即表示方式只有一种,返回值应为1
    if(n == 1)   return ___;   //当m=1时,显然无论m多大,n为1时只能表示为m个1之和,即表示方式只有一种,返回值应为1
    if(m < n)   return f(m,m);   //见下方说明1
    if(m == n)     return 1 + ___;   //见下方说明2
	return f(m,n-1) + f(m-n,___);   //见下方说明3
}
  • 说明1:

    当m<n时,这里需要注意不应该是返回错误,而是将返回值转化为f(m,m)。这hi因为如果所有的加数都为自然数的话,则最大的加数n是不会超过和m的,因此将m小于n的情况转化为m=n的情况,此处使用函数的递归调用。

    如f(2,3)=f(2,2)。

  • 说明2:

    当m=n时,则返回值为1+f(m,n-1),因为f(m,n)只比f(m,n-1)多了一个n+0的表示方法。

    如f(3,3)=1+f(3,2)

  • 说明3:

    当其他情况,即当m>n时,f(m,n) 可以递归地分解为两种情况:

    1. 当最大加数不包含n时,即f(m, n-1)。即最大加数为(n-1)时的表示方式数量。

    2. 当最大加数包含n时,即f(m-n, n)。因加数中至少有一个n,因此表示方式数量相当于剩下的数字m-n可表示为不大于n的自然数之和,按照函数的定义,表示方式的数量为f(m-n,n)。

      如题干中的f(5,3),在去除第一种情况不包含 3 即 f(5,3-1)=f(5,2)(2+2+1,2+1+1+1,1+1+1+1+1)后,其余表示方式数量为 f(5-3,3)=f(2,3)(3+2,3+1+1)=f(2,2)(2+0,1+1)

      再如f(6,2),在去除第一种情况不包含 2 即 f(6,2-1)=f(6,1)=1(1+1+1+1+1+1)后,其余表示方式数量为 f(6-2,2)=f(4,2)

答案:

故答案为:

int f(int m, int n)
{
    if(m == 1)   return 1;
    if(n == 1)   return 1;
    if(m < n)   return f(m,m);
    if(m == n)     return 1 + f(m,n-1);
	return f(m,n-1) + f(m-n,n);
}

标签:表示,return,函数,int,加数,算法,返回值,设计,___
From: https://www.cnblogs.com/DX3906le/p/sf001.html

相关文章

  • 数据结构与算法【Java】05---排序算法总结
    前言数据data结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码。要学习好数据结构就......
  • 函数的声明和调用
    1<script>2/*3把一段相对独立的具有特定功能的代码封装起来(写到一个地方),形成一个独立实体,就是函数,起个名字(函数名);4......
  • 【Python基础】内置函数filter详解
    filter,顾名思义,就是一个过滤器。其作用是从列表(或其他序列类型)中筛选出满足条件的子列表,filter是python的内置函数,无须import即可直接使用。1filter的基础用法对于列表(或......
  • 设计链表
    设计链表设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果要使......
  • Vue的钩子函数(路由守卫,keep-alive,生命周期)
    说到Vue的钩子函数,可能很多人只停留在一些很简单常用的钩子(created,mounted),而且对于里面的区别,什么时候该用什么钩子,并没有仔细的去研究过生命周期钩子:这一比较简单但......
  • 算法
    1、lc的链表对折那道题。2、在main函数里实例化链表然后测试3、 反转链表4、 三数之和......
  • 普通函数、参数、匿名函数、高阶函数、递归函数、闭包、装饰器
    函数定义#定义函数deffn():print("这是函数内部")#调用fn()fn()#区分fn:这是真正意义上的函数本身fn():这是调用函数参数形参实参函数参数可有......
  • 2022-2023-1 20221306《计算机基础与程序设计》第一周学习总结
    班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业链接:https://www.cnblogs.com/zhanquanchen/p/16654783.html作业目标:快速浏览教材作业正文:https://www.cn......
  • 2022-2023-1 20221322 《计算机基础与程序设计》第一周学习总
    作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01作业目标:快速浏览教材作业正文:https:......
  • 第六章 2 函数-参数 练习题
    第六章2函数-参数练习题[进阶拓展]1Python函数调用的时候参数的传递方式是值传递还是引用传递?python函数的参数传递有:位置参数、默认参数、可变参数、关键字参数函数......