100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 递归算法题解析:设m n均为自然数 m可表示为一些不超过n的自然数之和 f(m n)为这

递归算法题解析:设m n均为自然数 m可表示为一些不超过n的自然数之和 f(m n)为这

时间:2023-11-08 09:43:10

相关推荐

递归算法题解析:设m n均为自然数 m可表示为一些不超过n的自然数之和 f(m n)为这

题源:中科院软件所 1997 二,1(9分)

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

例:f(5,3)=5,有五种表示方式:

3+2

3+1+1

2+2+1

2+1+1+1

1+1+1+1+1

请补全递归代码。

答案

#include<stdio.h>int f(int m, int n);int main(){int m,n,ans;scanf("%d%d",&m,&n);ans = f(m,n);printf("%d\n",ans);}int f(int m, int n){if(m == 1)return 1;if(n == 1)return 1;if(m == n)return (1 + f(m, n-1));else if(m < n)return f(m, m)else// (m > n)return (f(m - n, n) + f(m, n - 1));}

第一行定义了f(m,n)这个函数,返回值即表示方式的数目,为一个整数.

第二行定义了 m 和 n 这两个自变量为整数.

if (m==1) return 1;这里是说如果m等于1,则函数的返回值为1,显然1只能分解为1,也即表示方式只有一种.

if (n==1) return 1;这里是说如果n等于1,则函数的返回值为1,显然无论m多大,n为1时只能表示为m个1之和,也即表示方式只有一种.

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

当最大加数包含n时,即f(m-n, n)

当最大加数不包含n时,即f(m, n-1)

f(6, 4)为例

而当 m>n 时,比如 f(6,4),可以分成两类讨论:

如果最大的加数为3,则按照定义共有f(6,3)种表示方法;而剩下的表示方法中必然有一个最大的加数4,由于总和为6,因此可知其余的加数之和为6-4=2,而要使小于等于4的自然数之和等于2,按照函数定义,共有f(2,4)种可能性。因此,f(6,4) = f(6,3) + f(2,4)。

递归算法题解析:设m n均为自然数 m可表示为一些不超过n的自然数之和 f(m n)为这种表示方式的数目

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。