C/C++ 递归 求前n项阶乘的值 /和

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 他们的数据类型

猜你喜欢

转载自blog.csdn.net/qq_35241206/article/details/80736318