【发布时间】:2014-04-17 19:10:58
【问题描述】:
static void sort(int array[])
{
//int array[]={20,40,30,60,70,80,50,90};
if(array.length==1)
return;
int mid=array.length / 2;
int part1[]=new int[mid];
int part2[]=new int[array.length-mid];
for(int i=0; i<array.length; i++)
{
if(i<mid)
{
part1[i]=array[i];
}
else
{
part2[i-mid]=array[i];
}
}
sort(part1);
sort(part2);
merge(part1,part2,array);
//for(int x=0; x<part1.length; x++)
//System.out.print(part1[x]+" ");
//for(int x=0; x<part2.length; x++)
//System.out.print(part2[x]+" ");
}
我知道递归是自称的方法(函数)。 我在这段代码中感到困惑,为什么该程序停止,当 sort() 方法执行并调用自身 sort(part1) 方法然后 sort(part1) 一次又一次执行以及 sort(part2) 和 merge(part1,part2,array ) 被执行,为什么这段代码不是无限的以及程序如何停止。 抱歉,我是 Java 新手
【问题讨论】:
-
使用调试器一步一步完成代码。
-
当array.length==1 则停止执行
-
if(array.length==1) return;是什么让你的代码停止。您是否尝试过在 StackOveflow 上查找有关递归的其他问题? -
尝试查找此评论末尾的问题,因为它对该主题有更详细的解释,这将有助于您更好地理解递归。您的代码类似于 jkohlhepp 的答案,更容易理解。 stackoverflow.com/questions/3021/…
-
@Coeur 关于递归的问题不需要“消除其他语言的歧义”。答案对所有人都是一样的。这篇有 5.75 年历史的帖子根本不需要任何编辑。不要进行琐碎的修改。