您的位置:首页 > 其它

整数分划问题(递归与非递归)

2011-05-24 13:20 162 查看
整数分划:

给定一个正整数 n , 一个由 r 个正整数组成的数组 λ = ( x1 , x2, . . . . , xr) 如果满足 x1 + x2 + ··· + xr = n 且 x1 ≥ x2 ≥ ··· ≥ xr ≥ 1, 就称数组 λ 是 n 的一个分划。n 的所有不同的分划的个数记作 p(n)。

比如说 4 的分划 p(4) = 4 :

  4 = 4 ;

  4 = 3 + 1 ;

  4 = 2 + 2 ;

  4 = 2 + 1 + 1 ;

  4 = 1 + 1 + 1 + 1 ;

 我们可以像字典给单词排顺序一样给 n 的所有分划排一个顺序:对于 n 的两个不同的分划 λ = ( x1 , x2, . . . . , xr) 和 μ = ( y1 ,y2, . . . . , ys),如果 λ 的 “首字母” x1 比 μ 的 “首字母” y1 大,就规定在字典序下 λ 比 μ 大,反之则规定 μ 比 λ 大。如果 x1 = y1 ,那么就比较它们的下一个 “字母” x2 和 y2 . . . . 这样继续下去,直到 λ 和 μ 在某一个位置上分出大小,根据这个位置上的大小关系来定义 λ 和 μ 之间的大小关系。在上面的例子中,我们就是按照字典序依次排列的 4 的分划。显然,( n ) 是所有分划中最大的,而 ( 1 , 1 , . . . , 1) 则是所有分划中最小的。这个比较 n 的分划的大小的规则和 C 语言比较字符串大小的规则是一样的。

写程序给定一个整数,输出所有分划。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: