博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几种方法的尾递归实现
阅读量:4879 次
发布时间:2019-06-11

本文共 2564 字,大约阅读时间需要 8 分钟。

http://freejvm.iteye.com/blog/976878

需要找时间验证一下,另外还需要学习多个参数的尾递归如何来实现的技巧

斐波那契数列第n个数的求值,

public static long fibo4(int n)        {            if (n < 2)            {                return n - 1;            }            else            {                return fibo4Helper(n, 0, 1, 3); //保持与非尾递归接口不变,是借助帮助方法实现尾递归的                }        }        private static long fibo4Helper(int n, long prepre, long pre, int begin)        {            if (n == begin)            {                return pre + prepre;            }            else            {                return fibo4Helper(n, pre, prepre + pre, ++begin);    //这里相当于迭代实现for-loop的浓缩                  }        }
//----------------------尾递归的其他实现-------------------------------------->      //2. 求最大公约数      public static int gcd(int big,int small){          if(big%small==0) return small;          return gcd(small, big%small);      }      //3.1 阶乘--非尾递归      public static int fn1(int n){          if(n<2) return 1;          return n*fn1(n-1);      }      //3.2 阶乘--尾递归      public static int fn2(int n){          if(n<2) return 1;          return fn2Helper(1, n);      }      private static int fn2Helper(int ret, int n){          if(n<2) return ret;          return fn2Helper(ret*n,n-1);      }          //4.1 翻转字符串--非尾递归         public static String reverse1(String s, int length){              if(length==0) return ""; //下一行的"+"可借助高版本JDK编译器的优化              return s.charAt(length-1)+reverse1(s,length-1);          }         //4.2 翻转字符串--尾递归         public static String reverse2(String s){             return reverse2Helper(s, "", s.length());         }         private static String reverse2Helper(String s,String init,int len){             if(len==0) return init;             return reverse2Helper(s, init+s.charAt(len-1), len-1);         }      //5. 验证字符串是否是回文 testHuiwen("abcdcba")       public static boolean testHuiwen(String s){           return testHuiwenHelper(s, 0, s.length());       }       private static boolean testHuiwenHelper(String s,int begin, int len){           if(begin< len>>1 && s.charAt(begin)==s.charAt(len-begin-1))                return testHuiwenHelper(s, begin+1, len);           else if(begin==len>>1) return true;           else return false;       }      //6. 翻转整数 如:1024=>4201       public static int reverseInt(int i){           return reverseIntHelper(i, 0);       }       private static int reverseIntHelper(int i, int init){           if(i==0) return init;           return reverseIntHelper(i/10, init*10+i%10);       }  }

 

转载于:https://www.cnblogs.com/chucklu/p/4634832.html

你可能感兴趣的文章
unity点选构建Mesh并保存OBJ
查看>>
python kmeans实战 - 单机一层聚类(小玩具哦),下次再弄个分布式多次聚类
查看>>
Java主要有那几种文件类型?各自的作用是什么?
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>
2017.11.18 手把手教你学51单片机-点亮LED
查看>>
xml的创建与解析
查看>>
grep不区分大小写查找字符串方法
查看>>
全双工和半双工
查看>>
2.1什么是软件需求,什么是功能需求
查看>>
linux系统灵活运用灯[android课程3]
查看>>
Android 通用Dialog中设置RecyclerView
查看>>
利用 Android Studio 和 Gradle 打包多版本APK
查看>>
Android 自定义标题栏
查看>>
Android 如何把一个 RelativeLayout或ImageView背景设为透明
查看>>
tomcat优化方向
查看>>
http
查看>>
8-1-组队赛
查看>>
codility: CountTriangles
查看>>
赛斯说
查看>>
python 中的pipe
查看>>