A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chuanyueing 中级黑马   /  2013-3-8 09:22  /  1528 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是一个递归算法把十进制的数字转化为二进制的数字
  1. public class TestDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 toBinary(10);
  6.         }
  7.         public static void toBinary(int num)
  8.         {
  9.                 if(num == 0)
  10.                 {
  11.                         return;
  12.                 }
  13.                 toBinary(num /2);
  14.                 System.out.print(num%2);
  15.         }

  16. }
复制代码
在运行到toBinary(num/2)这个方法时就一直调用递归
当num==0时,就返回到方法的调用处,打印语句System.out.print(num%2);
我觉得就不会输出,为什么,它能输出呢?

评分

参与人数 1黑马币 +9 收起 理由
贾文泽 + 9

查看全部评分

5 个回复

倒序浏览
运行正常啊.没有问题...
回复 使用道具 举报
本帖最后由 张洪慊 于 2013-3-8 09:51 编辑

对于递归,建议你画一个比较详细的过程图(主要标出变化的变量等,这样更清晰)

                         ----num=10                 num=5              num=2            num=1
  toBinary(10)--|                                 
                        ----toBinary(5)-------------  toBinary(2)-----> toBinary(1)-->toBinary(0)--->注意此时进入if执行返回  
                       ----  System.out.print(num%2)    返回1          返回   0                返回到此执行其下面的System.out.print(num%2)-->1
                             //这句话还未执行因为toBinary
                             //接着往下执行
                     
                              0   //到此toBinary执行完返回主函数
---->1010
                     
回复 使用道具 举报
Ok,可以运行的。
递归就是一直调用该方法,直到最后一个方法符合相应的条件,方法结束后返回继续执行前一个方法,一直到第一个方法执行结束。
输出的应该是1010
回复 使用道具 举报
本帖最后由 杨杨 于 2013-3-8 10:01 编辑
  1. package cn.itcast.day1;

  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.InputStreamReader;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetAddress;
  8. import java.util.ArrayList;
  9. import java.util.Arrays;
  10. import java.util.Collections;
  11. import java.util.List;
  12. import java.util.Scanner;
  13. import java.util.Stack;

  14. public class Test
  15. {
  16.         public static void main(String[] args)
  17.         {
  18.                 toBinary(10);
  19.         }
  20.         public static void toBinary(int num)
  21.         {
  22.                 System.out.println(num);
  23.                 if(num == 0)
  24.                 {
  25.                        return;
  26.                 }
  27.                 toBinary(num /2);
  28.                 System.out.print(num%2);
  29.         }

  30. }
复制代码
输出的值是
10
5
2
1
0
1010
当num==0的时候确实返回了 不返回是他没有等于0 没有等于0 就不断的调用自身
回复 使用道具 举报
为什么觉得不会输出呢?
当num==0时,就开始return打上一层的System.out.print(num%2);这条语句了,
之后就开始不停的返回上一层的System.out.print(num%2);语句。
这种情况就是递归啊,楼主是不是还没搞懂递归的概念啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马