1.递归: 直接或者间接的调用自己
2.使用递归的时候注意 3点
(1)从什么时候开始
(2)什么时候结束
(3)每一次干什么
3. 用递归求前n项阶乘的值(这里求的是前5项阶乘的值)
代码如下:
#include<iostream> using namespace std; //用 递归 求某项阶乘的值 5!=5*4*3*2*1 4!=4*3*2*1 3!=3*2*1 2!=2*1 即fun i*(i-1) int fun(int i) { //1.从什么时候结束 if(1==i) return 1; //2.每一次干什么 return fun(i-1)*i; //把fun(1)=1的值传入 fun函数中 } int main() { cout<<fun(5)<<endl; }
结果如下:
4. 用递归求前n项阶乘的和(这里求的是前5项阶乘的和)
代码如下:
#include<iostream> using namespace std; //用 递归 求某项阶乘的 值 5!=5*4*3*2*1 4!=4*3*2*1 3!=3*2*1 2!=2*1 int fun(int i) { //1.从什么时候结束 if(1==i) return 1; //2.每一次干什么 return fun(i-1)*i; //把fun(1)=1的值传入 fun函数中 } //用 递归 求某项阶乘 的和 5!=120 4!=24 3!=6 2!=2 1!=1 把当前阶乘的值和下一次阶乘的值相加 //(先遍历出来,cout<<i<<endl; fun2(i-1)打印出5 4 3 2 1,再调用递归,相加) int fun2(int i) { //遍历出来 1.从什么时候结束 if(1==i) return 1; //2.每一次干什么 //cout<<i<<endl; fun(i);//求第i项阶乘的值 return fun2(i-1)+fun(i); } int main() { cout<<fun2(5)<<endl; return 0; }
注意:当前的递归的值加上下一次的递归的值 就是前n项的和 即 fun2(i-1)+fun(i)
结果如下:
问题 :1、int型的数据范围[-2^31 , 2^31 -1] 即 [-2147483648,2147483647]
例如 求13的阶乘时候,就超过了 出现溢出现象。 所以,可以通过更改数据类型来解决问题
计算器求13!的结果 为 6227020800
代码求的结果 1932053504
解决问题:更改数据类型 double 或者 float 他们的数据类型