一个小程序(递归)

zhangpeng9886123 2008-10-25 11:00:08
这个程序怎么不能打印出数组,却是一个无限循环?

public class MyJava73402
{
public static void main( String args[])
{
int array[] = {1,2,3,4,5,6,7,8,9};
int size = 0;
MyJava73402 object = new MyJava73402();
object.printArray( array,size);
}

public void printArray(int array2[],int i)
{
System.out.println( array2[i]);

while ( i < array2.length )
printArray( array2,i++ );
}

}
...全文
353 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangpeng9886123 2008-10-25
  • 打赏
  • 举报
回复
我的i不是每调用一次函数就+1了吗 怎么一直是传0 呢
jerry313 2008-10-25
  • 打赏
  • 举报
回复
3F说的比较清楚
printArray( array2,i++ ); 相当与一直传0给int i
zhangpeng9886123 2008-10-25
  • 打赏
  • 举报
回复
我刚试了 把i++ 改成 ++i 就行了 这是为什么啊 不是每次都给i+1了吗 ??谢了啊
zhangpeng9886123 2008-10-25
  • 打赏
  • 举报
回复
为什么i每次传的都是0 啊 搞不清楚 i不是每次都+1了吗??
zhangpeng9886123 2008-10-25
  • 打赏
  • 举报
回复
单独的i++ 和 ++i不是一样的吗
getter 2008-10-25
  • 打赏
  • 举报
回复
i++與++i要搞清楚
nine_suns99 2008-10-25
  • 打赏
  • 举报
回复
递归就是用来代替循环的,递归中只需要判断就可以了

楼主的程序修改三个地方就可以了
1.将递归中的while修改成if
2.将判断中的i < array2.length修改成i < array2.length - 1
3.printArray(array2, i++)要修改成printArray(array2, ++i)否则要死循环的。

public class MyJava73402
{
public static void main(String args[])
{
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int size = 0;
MyJava73402 object = new MyJava73402();
object.printArray(array, size);
}

public void printArray(int array2[], int i)
{
System.out.println(array2[i]);

if(i < array2.length - 1)
printArray(array2, ++i);
}

}
lc7cl 2008-10-25
  • 打赏
  • 举报
回复
printArray( array2,i++ );
有问题啊,i++每次传的都是0。
huguang 2008-10-25
  • 打赏
  • 举报
回复
你对递归的理解有问题,先跟踪调试一下,就明白了
helios3023 2008-10-25
  • 打赏
  • 举报
回复
i++先使用i ,再加1,而++i在执行前会加1再使用i的值。

printArray( array2,i++ );

当i初值为0时,每次递归后传入i值都为0,因此一直满足递归中循环的条件,出现死循环。

printArray( array2,++i );

每次递归后传入i值都加1,当不满足while中的判断语句时,此次递归结束,不会出现死循环。
zdf8013 2008-10-25
  • 打赏
  • 举报
回复
xuexi 了 谢谢
cardinaleaf 2008-10-25
  • 打赏
  • 举报
回复
i++ 当时传的是i ,执行完后才会加1,而++i在执行前会加1
onebetter 2008-10-25
  • 打赏
  • 举报
回复
恩,是好简单的
songyun870 2008-10-25
  • 打赏
  • 举报
回复
while ( i < array2.length )
。。。怎么可以这么写呢
思路本身就有问题
这里应该写成if(i<array2.length)
zhangpeng9886123 2008-10-25
  • 打赏
  • 举报
回复
终于明白了 谢谢各位了啊 结帖了 真的很感谢
lc7cl 2008-10-25
  • 打赏
  • 举报
回复
其实你这句printArray( array2,i++ );
可以这么看
int j = i++;
printArray( array2,j);
对比一下
int j = ++i;
printArray( array2,j);
这下就清楚了!
++i和i++对于i来说是一样的,但对于整个表达式的值却不同!
zbwork000 2008-10-25
  • 打赏
  • 举报
回复
都没有返回值啊,怎么递归啊!!不明白。
Slayer_Boxer 2008-10-25
  • 打赏
  • 举报
回复
把i改成++i试试
zhangpeng9886123 2008-10-25
  • 打赏
  • 举报
回复
请问一下楼上的 我把i++改成i=i+1也行,这两句作为单独语句不是一样的意思吗
nine_suns99 2008-10-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhangyong369 的回复:]
只需要修改两处:
1、将whileg改为if.
2、将i++改为++i就可以了。
public class MyJava73402
{ public static void main( String args[])
{
int array[] = {1,2,3,4,5,6,7,8,9};
int size = 0;
MyJava73402 object = new MyJava73402();
object.printArray( array,size);
}

public void printArray(int array2[],int i)
{
System.out.println( array2[i]);
if ( i < array2.length )
printArray…
[/Quote]

楼上的,只修改两处必出现数组越界
加载更多回复(5)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧