递归算法实验求正整数的非负整数次幂(定义递归函数MyPow 用来计算一个浮点数的整数次幂(包括正整数、负整数和零))
本文目录
- 定义递归函数MyPow 用来计算一个浮点数的整数次幂(包括正整数、负整数和零)
- C语言 用递归函数求数值的整数次幂 double power(double x,int p).在求数值的负数次幂时出现问题
- 请高手分析一下此递归程序的算法思想!
- 用递归方法求一个正数a的n次方
- C 用递归函数求x的n次方
- 求x的n次方(x和n的值由键盘输入)(用递归的方法,
- c语言递归函数实现某数次幂的运算
- C语言题.用递归法写一个求幂的函数,并在主函数实现调用.要用c语言,不要c++的 提示
定义递归函数MyPow 用来计算一个浮点数的整数次幂(包括正整数、负整数和零)
代码文本:
#include "stdio.h"
double MyPow(double x,int n){
if(n==0)
return 1;
return n》0 ? x*MyPow(x,n-1) : 1/x*MyPow(x,n+1);
}
int main(int argc,char *argv){
int n;
double x;
printf("Enter n(int) & x(R:)...\n");
if(scanf("%d%lf",&n,&x)!=2){
printf("Input error, exit...\n");
return 0;
}
printf("The result are %g\n",MyPow(x,n));
return 0;
}
C语言 用递归函数求数值的整数次幂 double power(double x,int p).在求数值的负数次幂时出现问题
#include《stdio.h》double power_positive(double n,int p);double power_negative(double n,int p);int main(void){ double x,xpow; int exp; printf("Enter a number and the integer power to which\n"); printf("the number will be raised.Enter q to quit.\n"); while (scanf("%lf %d",&x,&exp)==2) { if (x==0) printf("%lf to the power of %d is 0.\n",x,exp); else { if (exp==0) printf("%lf to the power of %d is 1.\n",x,exp); else if (exp》0) { xpow=power_positive(x,exp); printf("%lf to the power of %d is %lf.\n",x,exp,xpow); } else { xpow=power_negative(x,exp); printf("%lf to the power of %d is %lf.\n",x,exp,xpow); } } printf("Enter next pair of numbers or q to quit.\n"); } printf("Hope you enjoyed this power trip --BYE!\n"); return 0;}double power_positive(double n,int p){ double pow=1; if (p》0) pow=n*power_positive(n,(p-1)); return pow;}double power_negative(double n,int p) //用递归实现 { if (p==-1)return 1/n; else return (1/n)*power_negative(n,p+1);}
请高手分析一下此递归程序的算法思想!
/* 重命名注释版 */#include 《stdio.h》#include 《stdlib.h》enum Bool { False, True };int cnt; /* 排列计数 */int *perm; /* 当前试验的排列 */enum Bool *valid; /* 标记某个数字是否用过 *//* 其实就是穷举n^n种有重复数字的排列,从中挑出无重复数字的排列,算法效率不高。 * 调用try1(n, digit)表示接着当前的排列,先试填数字digit。注意同一数先填后填会造成不同的排列。 * 当valid数组全部为True,即各位都没有填数字的时候,就是从某个数开始填。 * 当找到一个无重复的数输出后,由于多层递归逐层返回,恰好也把所有的位都置回可填。 */void try1(int n, int digit) /* digit是试验要填入的数字 */{ int cur; /* 当前试验的数位 */ for (cur = 0; cur 《 n; ++cur) /* 逐位试填 */ { if (valid == True) { /* current位未填 */ perm = digit; /* 填数 */ valid = False; /* current位已填,在下面的递归中不能再填 */ if (digit == n) { /* 试出一个无重复的数字 */ int k; cnt++; /* 计数 */ for(k = 0; k 《 n; ++k) /* 输出 */ printf("%d", perm); putchar(’\n’); } else try1(n, digit + 1); /* 递归试验下一个数字 */ valid = True; /* 当前位试填完,取出,可在下一轮填。注意是在递归返回后执行 */ } }}int main() { int n, i; printf("input n = "); /* n是位数 */ scanf("%d", &n); /* 开两个动态数组 */ perm = (int*) malloc(n * sizeof(int)); valid = (Bool*) malloc(n * sizeof(enum Bool)); if (perm == NULL || valid == NULL) exit(1); for (i = 0; i 《 n; ++i) /* 初始化为全部数位可用 */ valid = True; try1(n, 1); /* 一开始试填1 */ printf("cnt = %d\n", cnt); return 0;}
用递归方法求一个正数a的n次方
double fun(double a,int n){if(n==1)return a;else{return a*fun(a,n-1);}}递归的思想就是调用自身,设S(n)为a^n,则S(n)=a*S(n-1)
C 用递归函数求x的n次方
两个错误:1、按算法n小于0时,y=1/(fun(x,n+1)*x); 2、第二个条件应该为else if(n==0)如果是n=0,则成赋值表达式,该表达式为0即假,因此陷入死循环。
求x的n次方(x和n的值由键盘输入)(用递归的方法,
int func(int x,int n){ int y; if(n《0) { x=1/x; n=-n; } if(n==0) y=1; else y=x*func(x,n-1); return y;}void main(){ ......}
c语言递归函数实现某数次幂的运算
longdouble_pow_i(longdouble_X,int_Y){if(!_Y)return1;//次幂为0的情况if(!(_Y-1))return_X;//当_Y=1的情况则返回结果_Xreturn_X*_pow_i(_X,abs(_Y)-1);//每一步返回_X*上一次的乘积,_Y减1计数}longdouble_pow(longdouble_X,int_Y){longdouble_Z=_pow_i(_X,_Y);return_Y《0?1/_Z:_Z;}因为写在一起的话不好解释,所以分开正负的情况,_pow就是判断次幂是否为负数,是负数就等于1/那个数个正次幂。
C语言题.用递归法写一个求幂的函数,并在主函数实现调用.要用c语言,不要c++的 提示
/*x^n的值必须小于32767,否则输出的就是负数。因为,int只有这么大,正常的pow函数应该是float型或是double型,参数也应是float或是double型。*/
#include 《stdio.h》
int power(int x,int n)
{
if (n》1)
{
return x*power(x,n-1);
}
else
{
if (n》0)
return x;
else
return 1;
}
}
void main()
{
int x,n;
printf("input x,n:");
scanf("%d%d",&x,&n);
printf("%d",power(x,n));
getch();
clrscr();
}
更多文章:
html黑色背景代码(有没有HTML网页添加背景图片和颜色德代码)
2023年11月22日 18:40
elementor(blocksy主题和elementor是冲突的嘛)
2024年7月19日 02:53
datedif函数日期要统一格式吗(datediff函数用法!)
2024年8月15日 11:15
weblogic集群搭建(weblogic集群怎么配置ssl)
2024年7月3日 02:47
jquery select插件(怎么设置Jquery 多选下拉列表插件jquery multiselect 的高度)
2024年7月13日 21:30
aspnet服务器控件(在ASP.NET中将控件设置为作为服务器控件是为什么)
2024年7月1日 23:36
进程管理器 系统中断(win10系统中断占用cpu100%怎么办)
2024年9月4日 03:00
validation loss(matlab deeplearning toolbox 中的DBN输入数据必须是(0,1]范围内的吗)
2024年7月22日 16:41
excel+号隐藏(EXCEL表格中如何把几列数据隐藏,在顶上行成个+号,点+号就能弹出隐藏列)
2024年6月22日 13:44
c语言数组怎么存放汉字(C语言中如何读取文件中的汉字并将其存入数组中)
2024年8月6日 08:55
excel表格制作怎么添加表格(如何在一个EXCEL表格的单元格中插入一个EXCEL表格)
2024年9月9日 17:35