递归,a函数一直调用a函数直到根据结束条件语句与等价关系式返回我们想要的结果
递归的实现需要注意三点
1,递归函数的功能是什么(首先要知道这个函数要做什么)
2,递归结束条件语句(因为没有结束语句的话就会一直调用自己)
3,找出函数的等价关系式 ()
例子1:计算n的阶乘
n!=1*2*3*...n;
3!=1*2*3=6;
//2,找到结束语句
所以它的结束语句是n等于1的时候。(当然也可以是等于2的时候,因为不乘1对结果没有影响)
//3,找出等价关系式
数学表示就是1*2*3*...n
代码里面就是n*(n-1)一直乘到n等于1返回当前n也就是1(当然也可以是等于2的时候,因为不乘1对结果没有影响)
//这个函数要干什么 n的阶乘
static int f(int n){
//结束条件语句
if(n <= 2){
return n;
}
/*像栈一样将第一个放入栈一个一个放入最后取出的时候计算最终得到6!(6的阶乘)
f(2)=2
f(3)=f(2)*3
f(4)=f(3)*4
f(5)=f(4)*5
f(5)*6
*/
//函数的等价关系式子
// 把f(n)的等价操作写进去
return f(n-1) * n;
}
例子2: 找到第n个斐波那契数的值
斐波那契数列的是这样一个数列:1、1、2、3、5、8、13、21
1,写出递归函数实现的功能是什么:找到第n个斐波那契数的值
2,写出结束语句:可以看到当n等于1或者2的时候值是固定的可以作为结束语句。
3,写出等价关系式子也就是数列之间的关系式:n=(n-1)+(n-2).也就是前俩个数的和等于当前这个数。
//1,这个递归函数要实现什么功能 找到第n个斐波那契数的值
//例2:斐波那契数列
// 1 1 2 3 5 8 13 就是当前值等于前俩个值的和
static int f2(int n){
//2,写出结束语句
if(n<=2){
return 1;
}
/*
放入6
f2(5)+f2(4)
f2(4)+f2(3)+f2(3)+f(2)
f2(3)+f2(2)+f2(2)+f2(1)+f2(2)+f2(1)+f(2)
f2(2)+f2(1)+f2(2)+f2(2)+f2(1)+f2(2)+f2(1)+f(2)
*/
//3,写出等价条件语句
return f2(n-1)+f2(n-2);
}