黑马程序员——多种方法实现阶乘和
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)。
这是两个递归的算式,首先用递归的方式实现:
非递归的方式实现1:
非递归的方式实现2:
用多种方法实现递归的和:提示用户输入一个正整数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; }
相关文章推荐
- 黑马程序员——阶乘的两种实现方法及水仙花数的打印
- 黑马程序员——OC学习之成员变量的get,set方法多种实现
- 黑马程序员----OC学习之成员变量的get,set方法多种实现
- js中实现阶乘(多种方法)以及阶乘求
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- hibernate3 实现查询的多种方法
- 多种方法实现超长字符用"....."代替
- 单链表翻转的多种方法实现(c语言)
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 用CSS实现下拉菜单的多种方法
- ASP.NET弹出对话框多种实现方法
- ASP.NET数据分页的多种实现方法及性能比较
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 用CSS实现下拉菜单的多种方法
- checkbox实现全选的多种方法 不断更新 原创
- 用CSS实现下拉菜单的多种方法
- 绘制不规则位图方法总结,多种实现方法,全面测试比较
- checkbox实现全选的多种方法
- Visual C++中Tab View的多种实现方法
- (转)判断一个字符串是否全是数字的多种方法及其性能比较(C#实现