您的位置:首页 > 职场人生

黑马程序员——多种方法实现阶乘和

2015-04-07 23:18 232 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

用多种方法实现递归的和:提示用户输入一个正整数n,求出并输出下列结果:1! + 2! + 3! + 4! + … + n!。

首先我们分析一下这个算式。

先分析阶乘:

1 != 1

2 != 1*2

3 != 1*2*3



n != 1*2*3*…*(n-1)*n

n != (n-1)!*n

定义一个阶乘的函数jieCheng(int n)

jieCheng(n) = jieCheng(n-1)*n;

在分析和:

1! + 2! + 3! + 4! + … + n!

1! + 2! +…+jieCheng(n-2)+jieCheng(n-1)+jieCheng(n)

定义函数sum(int n)

sum(n) = sum(n-1) + jieCheng(n)。

这是两个递归的算式,首先用递归的方式实现:

#include <stdio.h>

int sum(int n);
int jieCheng(int n);

int main()
{
//定义变量存储用户输入
int input = 0;
//提示用户输出
while(input <= 0)
{
printf("请输入一个正整数:\n");
scanf("%d",&input);
}

int result = sum(input);

//int result = jieCheng(input);

printf("结果为%d\n",result);

return 0;
}
int sum(int n)
{
if(n == 1) return 1;
return sum(n-1) + jieCheng(n);
}

int jieCheng(int n)
{
if(n == 1) return 1;
return jieCheng(n-1) + n;
}


非递归的方式实现1:

#include <stdio.h>

int sum(int n);
int jieCheng(int n);

int main()
{
//定义变量存储用户输入
int input = 0;
//提示用户输出
while(input <= 0)
{
printf("请输入一个正整数:\n");
scanf("%d",&input);
}

int result = sum(input);

//int result = jieCheng(input);

printf("结果为%d\n",result);

return 0;
}
//定义阶乘函数
int jieCheng(int n)
{
//定义变量保存阶乘结果
int temp = 1;
//计算阶乘
for(int j = 1; j<=n; j++)
{
temp *= j;
}
//返回阶乘值
return temp;
}

//定义求和函数
int sum(int n)
{
//定义变量保存和
int output = 0;
//计算和
for(int i = 1; i<=n ;i++)
{
//调用阶乘函数,加上第i时的阶乘值
output += jieCheng(i);
}
//返回阶乘和
return output;
}


非递归的方式实现2:

#include <stdio.h>

int sum(int n);
int jieCheng(int n);

int main()
{
//定义变量存储用户输入
int input = 0;
//提示用户输出
while(input <= 0)
{
printf("请输入一个正整数:\n");
scanf("%d",&input);
}

int result = sum(input);

//int result = jieCheng(input);

printf("结果为%d\n",result);

return 0;
}
int sum (int n)
{
//定义变量保存和
int output = 0;
//累加,每次加的是一个阶乘值
for(int i =1; i<=n; i++)
{
//定义变量保存阶乘的结果
int temp = 1;
//计算阶乘
for(int j = 1; j<=i; j++)
{
temp *= j;
}
//累加每次的阶乘结果
output += temp;
}
//返回和
return output;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: