递归简论
我们熟悉的大多数数学函数都是由一个简单的公式来描述的,
模拟数学函数 公式为f(X)= 2f(x-1)+x*x
* 我们在非负整数集上定义一个函数f,它满足f(0)= 0;并且满足上述公式;
* 我们就可以根据上述公式定义一个函数 当一个函数 用它自己来定义时 就称之为递归函数
//可以使用递归的地方一定要满足几种条件 //不可以在调用自己的时候 陷入死循环 而且在调用自身的时候 一定有某些时候 可以不需要调用递归就能算出值 //也就是下面的函数 当x == 0的时候直接返回 0 否则陷入无限次的循环 就永远不会有结果 //并且 函数要不断的向 着 不需要调用递归就能算出结果的条件逐渐的推进 才可以使用递归 public int f(int x){ if(x==0) return 0; else return 2*f(x-1) + x*x; } @Test public void testf(){ System.out.println(f(8)); } /** * 那么这次使用递归 来练习一下 * 现在假设 一个正整数n 并希望把它打印出来,我们的的例程名字叫做 printOut(N),假设现在仅有的例程 * printDigit(n)每次只可以打印单个数字到终端, * 那么我们想打印76234 要怎么打印呢 * 我们来分析一下 假设 这个正整数有k位数字 我们完全可以用 这个正整数 去%10 取余 来获得,那么这个正整数去掉最后一位 * 用什么来表示呢 用n/10来表示; * 所以根据上述分析我们来编写递归函数, * 实现递归的两个必要条件 * 1 有基准情形 也就是不需要通过递归就可以算出结果的 * 也就是在我们打印的是一个单个整数的时候 我们直接使用printDigit来打印就可以了 * * 2 不断向基准情形推进 在个数大于1的时候 去掉最后一位数的前几位怎么表示 n/10 然后不断的去掉最后一位 一直到只剩一位 * 所以递归方法体里的内容就是 先取这个正整数的去掉最低位数的所有数字 在 去掉并且打印最后一位; * */ public void printOut(int n){ if(n>=10) printOut(n/10); printDigit(n%10); } public void printDigit(int x){ System.out.print(x); } @Test public void testPrintOut(){ printOut(76234); }