Algorithm 递归代码的空间复杂度
考虑以下Java方法:Algorithm 递归代码的空间复杂度,algorithm,recursion,analysis,Algorithm,Recursion,Analysis,考虑以下Java方法: public static void f(int n) { if (n<=1) { System.out.print(n) ; return; }else { f(n/2) ; System.out.print(n); f(n/2); } } // end of method publicstaticvoidf(int n){ if(n每当函数递归调用自身时,
public static void f(int n) {
if (n<=1) {
System.out.print(n) ;
return;
}else {
f(n/2) ;
System.out.print(n);
f(n/2);
}
} // end of method
publicstaticvoidf(int n){
if(n每当函数递归调用自身时,所有局部变量都保留在堆栈上,并且为新调用将一组新的局部变量推送到堆栈中。
这意味着您关心最多有多少个调用,换句话说,递归的最大深度是多少
很明显,它是logn,因为连续的参数是n,n/2,n/4,…,1。
局部变量的数量是恒定的,即1(堆栈上需要空间),因此总体空间复杂度为O(logn)。每当函数递归调用自身时,所有局部变量都保留在堆栈上,并将一组新的局部变量推送到堆栈以进行新的调用。
这意味着您关心最多有多少个调用,换句话说,递归的最大深度是多少
很明显,它是logn,因为连续的参数是n,n/2,n/4,…,1。
局部变量的数量是恒定的,即1(堆栈上需要空间),因此总体空间复杂度为O(logn).Stack Overflow不是发布在线考试并要求人们参加这些考试的地方。Stack Overflow是询问与编程相关的问答网站的地方。因此,如果你希望在这个问题上得到一些帮助,你必须提供你迄今为止的分析,并说明你为解决这些问题所做的努力,解释任何可能的困难你可能在这个过程中遇到了。谢谢你的无用评论,我并不是在试图找出答案……我知道答案。有时你只是不知道从哪里开始。堆栈溢出不是发布在线考试并要求人们参加这些考试的地方。堆栈溢出是询问与编程相关的问答网站的地方。所以如果你希望在这个问题上得到一些帮助,你必须提供你迄今为止的分析,并说明你为解决这个问题所做的努力,解释你在这个过程中可能遇到的任何困难。感谢你无用的评论,我不是在试图得到答案……我知道答案。有时你只是不知道从哪里开始。