编程实现求1!+2!+…+10!(完全递归,while辅助递归,双for三种方式)

本是古典 何须时尚 2022-08-07 09:36 178阅读 0赞
  1. #include<stdio.h>
  2. //递归实现:原理是f(n)=f(n-1)+n!=f(n-1)+n*(n-1)!=f(n-1)+n*(f(n-1)-f(n-2)) (最终把!去掉转换成函数fun(n...))
  3. int fun(int n)
  4. {
  5. if(n<=0)
  6. {
  7. return 0 ;
  8. }
  9. else if(n==1)//n==1,2是递归的出口
  10. {
  11. return 1;
  12. }
  13. else if(n==2)
  14. {
  15. return 3;//1+2就是3
  16. }
  17. else
  18. {
  19. return fun(n-1)+n*(fun(n-1)-fun(n-2));
  20. }
  21. }
  22. //for循环实现
  23. int fun2(int n)
  24. {
  25. int i,j;
  26. int sum=0;
  27. int temp ;
  28. for(i=1;i<=n;i++)
  29. {
  30. temp = i;
  31. for(j=1;j<i;j++)
  32. {
  33. temp = temp*j;
  34. }
  35. sum = sum+temp;
  36. }
  37. return sum;
  38. }
  39. //递归加上while循环实现
  40. int fun3(int n)
  41. {
  42. int sum = n;
  43. int step = n-1;
  44. if(n==1)
  45. {
  46. return 1;
  47. }
  48. while(step>=1)
  49. {
  50. sum*=step;
  51. step--;
  52. }
  53. sum+=fun3(--n);
  54. return sum;
  55. }
  56. int main()
  57. {
  58. printf("递归实现:1!+2!+...+10!=%d\n",fun(10));
  59. printf("双for实现:1!+2!+...+10!=%d\n",fun2(10));
  60. printf("递归加上while循环实现1!+2!+...+10!=%d\n",fun3(10));
  61. return 0;
  62. }

发表评论

表情:
评论列表 (有 0 条评论,178人围观)

还没有评论,来说两句吧...

相关阅读