递归改循环

递归与循环

          ·     理论上任何循环都可以重写为递归形式
                    有时候,为栈限制,需要“尾递归”
                    java不支持尾递归
          ·     有些语言没有循环语句,只能使用递归

递归改循环


          ·     改为递归的关键是发现逻辑的“相似性
          ·     不要忘记递归“出口”
 写法不唯一
//arithmetic 算法
package day2017211;

public class one {

    public static void fun(int n){
       if(n>0)
           fun(n-1);  //打印 0-(n-1)
       System.out.print(n);//打印n行
    }

    public static void fun2(int begin,int end){
       if(begin>end)return;
       System.out.println(begin);
       fun2(begin+1, end);

    }
    public static void main(String[] args) {
       /*for(int i=0;i<10;i++){
           System.out.println(i);
       }*/
//     fun(9);
       fun2(0,9);
    }
}
   
构造相似性
          
          ·     如果没有明显的相似性,需要主动构造(引用某种假设、规划使相似性凸显丢鬼仅仅)
          ·     不能相似的原因有可能是缺少参数
          ·     递归与数学上的递推公式很类似



递归调用

          ·     递归仅仅是被调函数恰为主调函数
          ·     注意每次调用的层次不同
          ·     注意每次分配的形参并非同一个变量
          ·     注意返回的次序


     

你可能感兴趣的:(算法)