| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1908 人关注过本帖
标题:关于递归
只看楼主 加入收藏
九鸢
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2018-11-28
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:3 
关于递归

第一次写递归
真的不知道怎么使
求教
一个正整数可以拆分成若干个正整数的和。例如正整数4,可以有4种拆分方法:
    4=3+1、4=2+2、4=2+1+1,4=1+1+1+1
用 n 表示待拆分的正整数,用 m 表示从 n 中拆出的最大正整数,则计算对正整数 n 共有多少种拆分方法可以下列递归公式:
              0     ( 当 n < 1 或 m < 1 时 )
              1                             ( 当 n = 1 或 m = 1 时 )
  count(n,m)= count(n, n)                   ( 当 n < m 时 )
              count(n, m-1) + 1             ( 当 n=m 时 )
              count(n-m, m) + count(n, m-1) ( 其他情况 )
编写递归函数,计算一个正整数有多少种拆分方法。
函数原型如下:
int count( int n, int m)
参数说明:n 待拆分的正整数,m 表示从 n 中拆出的最大正整数;函数返回值是拆分方法数。
例如输入:4, 输出:4
搜索更多相关主题的帖子: 递归 正整数 拆分 方法 count 
2018-12-02 14:52
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:396
专家分:2640
注 册:2018-3-30
收藏
得分:10 
。。。照着你的递归公式敲的
程序代码:
#include<stdio.h>
int count( int n, int m)
{
    if(n<1||m<1) return 0;
    if(n==1 || m==1) return 1;
    if(n<m) return count(n, n);
    else if(m==n) return count(n,m-1)+1;
    else return count(n-m, m) + count(n, m-1);
}
int main()
{
    printf("%d",count(4,3));
    return 0;
}

saber,别哭.
2018-12-02 16:03
九鸢
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2018-11-28
收藏
得分:0 
回复 2楼 幻紫灵心
我不懂为什么会有n<m的情况,按照m的定义 m不是等于n-1吗?
2018-12-03 17:34
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:396
专家分:2640
注 册:2018-3-30
收藏
得分:0 
count(4,3) 进去就会调用count(n-m, m) + count(n, m-1);

也就是count(1,3) + count(4,2);  

就会产生n<m了

saber,别哭.
2018-12-03 20:01
快速回复:关于递归
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.088519 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved