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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨占伟 于 2012-11-29 16:03 编辑

递归算法我看了好多代码还是不清楚,谁帮举个简单的例子,并详细说明一下.

评分

参与人数 1技术分 +2 收起 理由
张文 + 2 好的习惯。问题解决了,主动更改帖子为已解.

查看全部评分

6 个回复

倒序浏览
本帖最后由 崔维友 于 2012-11-30 12:42 编辑

最简单的递归
  1. class Digui {
  2.         public static void main(String[] args)
  3.         {
  4.                 System.out.println("Hello World!");
  5.                 //调用自身
  6.                 main(args);
  7.         }
  8. }
复制代码
如果没有终止条件,会导致堆内存溢出:

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
class diGui2
{

static int count=0;   
public static void main(String[] args) {      
        Add(1);     
System.out.print(count);   
}  

public static void Add(int num)     {     
                if(num<=100)      
                {  count+=num;      
                Add(num+1);      //简单的说就是自己调用自己
                }  
        }
}

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
//计算数组{1,1,2,3,5,8.......} 第30位值

static void Main(string[] args)   
{   Console.WriteLine(Process1(30));  Console.ReadLine();  }   

public static int Process1(int i)   
{   //计算数组{1,1,2,3,5,8.......} 第30位值  
if (i == 0) return 0;  
if (i == 1) return 1;  
else
return Process1(i - 1) + Process1(i - 2);
}

我个人认为递归算是一种变相的循环,只不过它没有明显的循环语句和终止条件。
它是一种函数执行到某一步时又再次调用本函数继续执行,在调用执行时又会调用执行本函数,如此往返,直到不满足条件时跳出,一层层的跳出。最后出来的时候返回的是最里层的执行结果。
  

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
  1. namespace test
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             Console.WriteLine(func(10));         
  8.             Console.ReadKey();
  9.         }
  10.         public static int func(int n)
  11.         {
  12.             if (n == 1)
  13.                 return 1;   //递归的出口条件
  14.             else
  15.                 return func(n - 1) + 1;//调用自身并且降低问题规模同时也会增加栈的开销(因为要保存“现场”)
  16.         }
  17.     }
  18. }
复制代码
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数来表示问题的解。
递归算法解决问题的特点:
  (1) 递归就是在过程或函数里调用自身。   
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。   
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。   
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
谢谢大家的回复.
回复 使用道具 举报
马毅 中级黑马 2012-11-30 10:46:04
7#
崔维友 发表于 2012-11-29 12:58
最简单的递归如果没有终止条件,会导致对内存溢出:

简洁,清楚~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马