C语言用递归算法实现:整数模幂运算 x的r次模p。 用循环控制比较简单,但是自己用递归写了个运行时结果不
#include<stdio.h>
voidorder_print(intn)
{
if(n<10)
{
printf("%d",n);
return;
}
order_print(n/10);
printf("%5d",n%10);
}
void reverse_print(intn)
{
if(n<10)
{
printf("%-5d",n);
return;
}
printf("%-5d",n%10);
reverse_print(n/10);
}
int main(void)
{
int n;
printf("Inputainteger:");
scanf("%d",&n);
printf("Orderprint:");
order_print(n);
printf("\n");
printf("Reverseprint:");
reverse_print(n);
return0;
}
运行效果:
扩展资料:return的用法:
return的作用是结束正在运行的函数,并返回函数值。return后面可以跟一个常量,变量,或是表达式。函数的定义一般是这样的,例如:
inta(inti)//第一个int是函数的返回值的类型,也就是return后面跟的值的类型,a是函数的名称,括号里的是传递给函数的参数,int是参数的类型,i是参数的名字
{
...//省略函数体内容
returnb;//b必须与函数头的返回值一致(此处为int型)
}
简单函数举例:
intaddOne(intb)
{
returnb+1;
}
该函数的作用是取得一个数,将这个数加上1,再将结果返回
调用时这样:
intresult=addOne(2);//此时result的值为3
函数括号里的参数也可以为变量或能算出值的表达式
以上就是一个基本的函数,一般的函数都有返回值,也就是return后面跟的值,返回值可以为各种数据类型,如:int,float,double,char,a[](数组),*a(指针),结构或类(c++)
但不是所有函数都有返回值,如果某个函数无返回值,那么返回值的位置则为“void”关键字,此时函数体中无返回值,即无return的值。但是函数中也可出现return,即一个空的return句子,其作用是使函数立即结束,如voidprint()//括号中为空表示无传递参数、
{
printf("a");
printf("b");
return;//函数执行到此处结束
printf("c");
}//该函数只执行到return语句处,即屏幕上输出的为"ab"
int fun(int a)
{
if(a==1)return a;
return fun(a-1)*a;
}
#include <stdio.h>
void Run(int x,int r,int p,int t)
{
int a,b,c;
a=x;b=r;c=t;
if(b==0)
{
printf("%d",c);
return;
}
if((b>0)&&(b%2==0))
{
b=b/2;
a=(a*a)%p;
}
else
{
b=b-1;
c=(a*c)%p;
}
Run(a,b,p,c);
}
void main()
{
int x,r,p,t=1;
printf("please enter x :");
scanf("%d",&x);
printf("please enter r :");
scanf("%d",&r);
printf("please enter p :");
scanf("%d",&p);
Run(x,r,p,t);
}
#C语言# 请问用递归实现 n!为什么是死循环?
在这个递归函数中,循环终止条件应该是 j >= m 而不是 j < m,否则函数将一直递归调用下去,直到栈溢出,导致死循环。此外,在递归调用中,应该传递 (m - 1) 而不是 (j + 1),以便递归到最终结果。以下是修正后的代码:int Fac(int m){ if (m <= 1) { \/\/ 递归终止条件 return 1...
C语言题.用递归法写一个求幂的函数,并在主函数实现调用.要用c语言...
提示 C语言题.用递归法写一个求幂的函数,并在主函数实现调用.要用c语言,不要c++的。 提示:例如3∧4=81→①3∧4=3*3∧3,②3∧3=3*3∧2,3∧2=3*3∧1,3∧1=3*3∧0。(当指数等于0时结果为1)。 int power(int x,int n)...展开 梦谛生 | 浏览734 次 |举报 我有更好的答案...
c语言算n的阶乘的递归算法
思路:递归求阶乘函数,如果输入的参数等于1则返回1,否则返回n乘以该函数下次递归。参考代码:include<stdio.h>int fun(int n){if(n==1||n==0) return 1;\/\/如果参数是0或者1返回1return n*fun(n-1);\/\/否则返回n和下次递归的积}int main(){int n;scanf("%d",&n);printf("%d\\n",...
易语言递归算法怎么用,求高手给举个简单点的例子
= 查找数组 [i]查找数组 [i] = 中间值 左右查找 (左边值, i - 1, 查找数组, ) ' 继续处理左边的,这里是个递归的过程 左右查找 (i + 1, 右边值, 查找数组, ) ' 继续处理右边的,这里是个递归的过程 ww = 查找数组 ' 以上是快速排序的代码实现,核心所在是递归的过程。
C语言中的递归是什么意思
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归策略只需少量的程序就可描述出解题过程所需要的多次重复...
如何用c语言中的函数递归调用算法实现n阶矩阵的n次幂的求解?
\/*用c语言中的函数递归调用算法实现n阶矩阵的n次幂*\/#include <stdio.h>#include <stdlib.h>#include #include <string.h>\/\/创建矩阵,矩阵用一维数组存储double *matCreate(unsigned int m, unsigned int n){ double *p = (double *)malloc(sizeof(double) * m * n); if (p == ...
急急急!!!java语言用递归方法计算1+3+5+7+...+67的和,s(n)=n+s(n...
public class Test {public static int sum(int n){if(n >= 1){return n + sum (n - 2);}return 0;}public static void main(String[] args) {System.out.println("sum = " + sum(67));}}
C语言,背包问题,用递归算法,下面这个怎么编程,谢谢!
背包问题是npc问题。直接用枚举算法。要想增加效率,可以试着储存重复状态。背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于...
C语言:有5个人围坐在一起问第五个人多大年纪,他说比第四个人大两岁,问...
这个题是C语言的递归算法。参考代码:include<stdio.h> int main()include<stdio.h> int main(){ int number();printf("%d",number(5));} int number(int n){ int age;if(n==1)age=10;else age=number(n-1)+2;return age;} ...
...用递归方法实现阶乘运算f(n)=n!,试解释递归算法的特点。可以写具体一...
include "stdafx.h"float f(int n) { float fn=1;if(n<0){ printf("n<0 dataerror!");fn=0;} else if (n==1) fn=1;else fn=f(n-1)*n;return (fn);} void main() { int n=5;printf("%f\\n",f(n));}
全杭刻迪: 需要输入x,r,p #include <stdio.h>void Run(int x,int r,int p,int t) {int a,b,c;a=x;b=r;c=t;if(b==0){printf("%d",c);return;}if((b>0)&&(b%2==0)){b=b/2;a=(a*a)%p;}else{b=b-1;c=(a*c)%p;}Run(a,b,p,c); }void main() {int x,r,p,t=1;printf(...
泗洪县18014092590: c语言递归函数实现某数次幂的运算?
全杭刻迪: long double _pow_i( long double _X, int _Y ) {if ( !_Y ) return 1; // 次幂为0的情况if ( !(_Y-1) ) return _X; // 当_Y = 1的情况则返回结果_X return _X * _pow_i( _X, abs(_Y)-1 ); // 每一步返回 _X * 上一次的乘积,_Y 减1计数 }long double _pow( ...
泗洪县18014092590: C语言题.用递归法写一个求幂的函数,并在主函数实现调用.要用c语言,不要c++的. 提示?
全杭刻迪: #include<stdio.h> int power(int x,int n) { if(n == 0) //任何数的0次方都是1 return 0; else if(n ==1) //如果是1次方 则返回本来的值 return x; else //否则递归循环 return x*power(x,n-1); } main() { printf("%d ",power(3,3)); printf("%d ",power(4,2)); getchar(); return 0; }
泗洪县18014092590: 在C语言中,按下述递归定义编写一个计算幂级数的递归函数 x^n={1,n=0;x*x^n - 1,n>0 - ?
全杭刻迪: float f(int n,float x) { if(n)return x*f(n-1,x); return 1; }
泗洪县18014092590: C语言 用递归函数求数值的整数次幂 double power(double x,int p)输入负整数次幂时出现问题 - ?
全杭刻迪: double power_negative(double n,int p) {double pow = 1;int q;q=-p; if(q>0)pow = power_negative(n,1-q) / n; return pow; }改成这样,虽然你那个写的是递归调用,但是返回的却是1/pow,那么就会是0.5 * 2 * 0.5 * 2 * 0.5这样的形式返回,所以最终无论是多少,结果都是0.5,而且递归时应该用1-q,因为你调用负数求幂,必须使参数为负才会正确
泗洪县18014092590: c语言 用递归法求x的n次幂 #include<stdio.h> #include<proc - ?
全杭刻迪: #include<stdio.h> float ji(int x,int n) { static float j=1; static int i=0; j=j*x; ++i; if(n>i) ji(x,n); else {printf("%g",j);return;} } main() { int a,b; scanf("%d",&a); scanf("%d",&b); ji(a,b); }
泗洪县18014092590: 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 ...
泗洪县18014092590: 如何用C语言编写幂运算的代码 - ?
全杭刻迪: #include "stdio.h" #include "math.h"int main() {float a,b;printf("请输入整数:");scanf("%f",&a);printf("请输入幂:");scanf("%f",&b);printf("结果:%g\n",pow(a,b)); }
泗洪县18014092590: C语言.编写程序,用递归函数完成,求整数1+……+n的和,其中n自己输入.. - ?
全杭刻迪: #include int sum(int); int main() { int n; scanf("%d", &n); printf("1+...+%d = %d", n, sum(n)); return 0; } int sum(int x) { if(x==1) { return 1; } else { return x+sum(x-1); } }
泗洪县18014092590: C语言:求x的y次幂,我用了递归,但我想不到这么简单的程序我竟然错了,好久没弄它了. - ?
全杭刻迪: 直接乘就是,为什么要递归?后面的else没有return啊. 用dev-c++通过. #include <stdio.h> int func1(int x,int y); void main(){int y, x, result;scanf("%d%d",&x,&y);result=func1(x,y);printf("x^y=%d\n",result);getch(); } int func1(int x,int y){if(y==1){return x;}else{return func1(x,y-1)*x;} }