黑马程序员技术交流社区
标题:
关于递归的算法
[打印本页]
作者:
chuanyueing
时间:
2013-3-8 09:22
标题:
关于递归的算法
这是一个递归算法把十进制的数字转化为二进制的数字
public class TestDemo
{
public static void main(String[] args)
{
toBinary(10);
}
public static void toBinary(int num)
{
if(num == 0)
{
return;
}
toBinary(num /2);
System.out.print(num%2);
}
}
复制代码
在运行到toBinary(num/2)这个方法时就一直调用递归
当num==0时,就返回到方法的调用处,打印语句System.out.print(num%2);
我觉得就不会输出,为什么,它能输出呢?
作者:
陈圳
时间:
2013-3-8 09:27
运行正常啊.没有问题...
作者:
张洪慊
时间:
2013-3-8 09:48
本帖最后由 张洪慊 于 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
作者:
黑马李超
时间:
2013-3-8 09:49
Ok,可以运行的。
递归就是一直调用该方法,直到最后一个方法符合相应的条件,方法结束后返回继续执行前一个方法,一直到第一个方法执行结束。
输出的应该是1010
作者:
杨杨
时间:
2013-3-8 10:00
本帖最后由 杨杨 于 2013-3-8 10:01 编辑
package cn.itcast.day1;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
public class Test
{
public static void main(String[] args)
{
toBinary(10);
}
public static void toBinary(int num)
{
System.out.println(num);
if(num == 0)
{
return;
}
toBinary(num /2);
System.out.print(num%2);
}
}
复制代码
输出的值是
10
5
2
1
0
1010
当num==0的时候确实返回了 不返回是他没有等于0 没有等于0 就不断的调用自身
作者:
冷叙辰
时间:
2013-3-8 11:53
为什么觉得不会输出呢?
当num==0时,就开始return打上一层的System.out.print(num%2);这条语句了,
之后就开始不停的返回上一层的System.out.print(num%2);语句。
这种情况就是递归啊,楼主是不是还没搞懂递归的概念啊。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2