以下递归代码用于计算可以对给定数字求和的不同可能方式。
输入:4
输出: 1111 112 121 112 22 13 31 4 有8种(2 ^(n-1))种不同的方式来获得4。
我想知道这个算法的Big O复杂性是什么?我很欣赏处理递归算法的基本思维过程。另外一个问题,为什么方法的数量是2 ^(n-1)?我无法从算法中找出答案。非常感谢你们!
public static int recursive(int n, String out){
int count=0;
if (n==0) {
System.out.println(out);
return 1;
} else if (n>0) {
for (int i=1; i<=n; i++){
count+=recursive(n-i, out+" "+Integer.toString(i));
}
return count;
} else {
return 0;
}
}
答案 0 :(得分:0)
BigO(顺序)复杂性可能是一个有点松散的术语。它用于算法性能的缩略图估计。
如果你查看你给出的代码,你可以开始想象代码不是递归的。在这种情况下,算法大约为n(主循环)。每次调用(n-1)都会调用递归函数n次! (n-1阶乘)次数(n-1 ... 0)。所以它看起来像你拥有的是什么
O(n(n-1)!)=&gt;为O(n!)
这是发生了多少字符串追加操作的缩略图(主要for循环的内容,这是代码正在做的主要事情)。