跪求大神,小弟问一个关于递归的问题

online_onlie 2013-12-23 04:54:31
public class Tobinary
{
public static void main(String[] args)
{
change(18) ;
}
public static void change(int num)
{

if (num == 0)
{
return ;
}
change(num / 2) ;
System.out.print(num % 2) ;
}



这是一个用递归写的把十进制转换成二进制的程序。
但是小弟不明白的是,当程序执行到num = 0 的时候,那么这整个调用的函数就随return 结束了,然后控制权就回到num = 1 的被调用函数中,但是为什么是change(num / 2)之后不是继续再调用这个函数本身,然后就执行 if语句,而是接下来就执行输出语句。求大神指导,先谢谢啦。
...全文
262 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
online_onlie 2013-12-30
  • 打赏
  • 举报
回复
引用 6 楼 penyinsi 的回复:
当程序执行到num = 0 的时候,就会走return,递归就结束了,然后就会依次走原先未执信打印语句,按反过来的顺序,先走num=1时的打印语句,打印1,依次 num=2 0 num=4 0 num=9 1 num=18 0 所以打印 10010 明白了吗,LZ
谢谢你,我明白了,学了数据结构后就知道怎么回事了。函数的进出栈问题。还是要谢谢你
douzide58 2013-12-25
  • 打赏
  • 举报
回复
函数进栈的顺序change(18) ->change(9)->change(4)->change(2)->change(1)->change(0)当num==0,return change(0)出栈,接着change(1)执行完默认return,一次类推
PorcoGT 2013-12-24
  • 打赏
  • 举报
回复
引用 5 楼 u010637941 的回复:
这个程序有打印出来的吗?我怎么觉得不会输出啊,我试了也没输出。num=1除以2等于0的时候,进入if语句,方法结束了啊,是我没看你你说什么?
会有的,num=1时除以2等于0进行递归,这个时候进入if执行return,但是注意此时return掉的是num=0时的方法,这时还有一个num=1的方法没有执行完,num=1的方法不会被return掉,所以会打印
penyinsi 2013-12-24
  • 打赏
  • 举报
回复
当程序执行到num = 0 的时候,就会走return,递归就结束了,然后就会依次走原先未执信打印语句,按反过来的顺序,先走num=1时的打印语句,打印1,依次 num=2 0 num=4 0 num=9 1 num=18 0 所以打印 10010 明白了吗,LZ
  • 打赏
  • 举报
回复
引用 2 楼 u013190657 的回复:
我也迷惑 我以为应该是先输出语句再写递归语句 结果两个打印出来的正好一反
enen
  • 打赏
  • 举报
回复
num=0的时候return到num=1的调用里,当然要打印那个1了,然后再继续往上返回啊。
河南的lu小康 2013-12-23
  • 打赏
  • 举报
回复
我也迷惑 我以为应该是先输出语句再写递归语句 结果两个打印出来的正好一反
coolbamboo2008 2013-12-23
  • 打赏
  • 举报
回复
其实你自己设个断点,自己走走看这个程序,不难发现他的脉络 引用你的:【然后控制权就回到num = 1 的被调用函数中,】(注意,此时change(num / 2) ;这句结束,接下来函数会执行最后那句打印的)
骑着蜗牛学 2013-12-23
  • 打赏
  • 举报
回复
这个程序有打印出来的吗?我怎么觉得不会输出啊,我试了也没输出。num=1除以2等于0的时候,进入if语句,方法结束了啊,是我没看你你说什么?

62,621

社区成员

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

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