如何将2n表示为n个变量的总和(Java实现?)
|
我想知道是否有一种优雅的方法可以将2n的所有成分导出为n个非负整数变量的总和。
例如,对于n = 2个变量x和y,有5个成分分为两部分:
x = 0 y = 4; x = 1 y = 3; x = 2 y = 2; x = 3 y = 1; x = 4 y = 0
这样x + y = 4 = 2n。
更一般而言,可以制定问题以将s的所有组成都找到n个非负整数变量,它们的和等于s。
任何有关如何有效计算此问题的建议都将受到欢迎,一些伪代码将不胜感激。谢谢。
编辑:虽然下面在Perl和Prolog中介绍了解决方案,但是Java实现可能会出现一个新问题,因为在递归调用期间需要传递和操纵线性数据结构(例如数组),并且随着n的获得,这种做法会变得非常昂贵更大,我想知道是否存在替代(更有效)的Java实现来解决此问题。
没有找到相关结果
已邀请:
2 个回复
葛瞎说漓
输出:
骚瓤
谓词compostion0 / 3将其第一个自变量表示为以第二个自变量为长度的非负整数列表(第三个自变量)的总和。 该定义需要一些实用程序谓词,这些谓词通常由实现提供,可能形式略有不同。为了完整性,对于/ 3的计数谓词和列表谓词的长度的Prolog定义如下: