编写函数,求n的阶乘,并写出主函数测试之

编写函数,求n的阶乘,并写出主函数测试之,第1张

int factorial(int n)//递归算法 自己用主函数测去

{

if(n<1)

return 0;

else if(n==1)

return 1;

else

return nfactorial(n-1);

}

#include <stdioh>

// 声明递归函数 factorial,用于计算 n 的阶乘

int factorial(int n);

int main() {

int n;

printf("请输入一个非负整数 n: ");

scanf("%d", &n);

if (n < 0) {

printf("输入错误!\n");

return -1;

}

printf("%d 的阶乘为 %d\n", n, factorial(n));

return 0;

}

// 定义递归函数 factorial,用于计算 n 的阶乘

int factorial(int n) {

if (n == 0 || n == 1) {   // 边界条件

return 1;

} else {

return n factorial(n-1);   // 递归调用

}

}

#include <iostreamh>

int fun(int);

void main()

{

int n,sum=0;

cout<<"Please input n:";

cin>>n;

for (int i=1;i<=n;i++)

sum+=fun(i);

cout<<sum<<endl;

}

fun(int n)//递归返回n的阶乘

{

if(n==1)return 1;

else return nfun(n-1);

}

int fun1(int n) //其实返回double型比较好,因为int型能表示的数太小了(对于阶乘来说)

{

int fac = 1; //如果返回double型的话,这里不要忘记改

for (int i = 1; i <= n; i++)

fac = i;

return fac;

}

//或者用递归写这个函数

int fun1(int n)

{

if (n == 1) return 1;

return n fun1(n - 1);

}

我在这里写出执行该过程的调用函数int fun(int N,int k){ int s=1,i,t;for(i=1;i<=N;i++)s=i; /求出了N的阶乘/ j=s%10;if(j==0) /判断N的阶乘最末一位是否为0/{for(j=0;j<k;j++) /控制需要取余的次数/j=j%10;return j;}else for(i=0;i<k;i++) {s=s%10;return s; }} 用的字母有点混,这个结果应该没问题,可以明白的,这题的关键是判断阶乘的最末一位是否为0,还有就是阶乘取于的次数,把这个搞清楚,这题你就应该会做了,希望你能看的明白哦!

第一个:定义一个函数求n的阶乘,就是从1乘到n 然后弄个一个循环累加

第二个:穷举法:设各有a、b、c只,然后列举所有的abc使之等式成立,弄个三重循环就行了

第三个:参考网络

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。

double func(double x) //函数

{

return xxxx-3xxx+15xx-40;

}

double func1(double x) //导函数

{

return 4xxx-9xx+3x;

}

int Newton(double x,double precision,int maxcyc) //迭代次数

{

double x1,x0;

int k;

x0=x;

for(k=0;k<maxcyc;k++)

{

if(func1(x0)==00)//若通过初值,函数返回值为0

{

printf("迭代过程中导数为0!\n");

return 0;

}

x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算

if(fabs(x1-x0)<precision || fabs(func(x1))<precision) //达到结束条件

{

x=x1; //返回结果

return 1;

}

else //未达到结束条件

x0=x1; //准备下一次迭代

}

printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度

return 0;

}

int main()

{

double x,precision;

int maxcyc;

printf("输入初始迭代值x0:");

scanf("%lf",&x);

printf("输入最大迭代次数:");

scanf("%d",&maxcyc);

printf("迭代要求的精度:");

scanf("%lf",&precision);

if(Newton(&x,precision,maxcyc)==1) //若函数返回值为1

printf("该值附近的根为:%lf\n",x);

else //若函数返回值为0

printf("迭代失败!\n");

getch();

return 0;

}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13495020.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存