递归是树结构,迭代是环结构
递归就是函数调用自己
斐波那契数递归 1 1 2 3 5 8 13
//1. 递归通过return传递结果参和计数参
public int sum(int s,int n){
System.out.println(n)
if(n==2||n==1)return 1;
return sum(s,n-1)+sum(s,n-2);}
//如同树结构,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历
//2. 尾递归
public int sum(int n,int a1,int a2){
if(n<2)return a1;
return sum(n-1,a2,a1+a2);}
//原本栈是先扩展开,然后边收拢边计算结果,现在却变
成在调用自身的同时通过参数来计算。编译器通常都会对尾递归进行优化。编译器会发现根本没有必要存储栈信息了,因而会在函数尾直接清空相关的栈
编写一个递归函数需要考虑
- 这个递归函数的功能是什么,
怎样调用这个函数,即设计好递归函数的返回值和参数列表 - 什么时候应该结束这个递归,它的边界条件(出口)是什么(边界条件)
- 在非边界情况时,怎样从第n层转变成第n+1层(递推公式)
迭代的意思其实就是在循环中出现了参与运算的变量就是保存结果的变量,这样就可以算是迭代 eg: i += 1;print(i)
迭代是一个环结构,从初始状态开始,每次迭代都遍历这个环,并更新状态,多次迭代直到到达结束状态。