递归函数c语言return空格,关于c语言递归函数的 求大神帮助 有悬赏
递归函数c语言return空格,关于c语言递归函数的 求大神帮助 有悬赏详细介绍
本文目录一览: 讲一下c语言中递归函数的使用方法
相当于循环,要有判断条件,传递进去的参数要变化,满足条件调用自身,不满足条件就开始一层一层返回。简单例子:
int f(int i){
int sum=0;
if(i>0) sum+=f(i-1);
return sum;
}
main(){
int a=10;
printf("%d",f(a));
}
递归函数有三点要求:
1,递归的终止点,即递归函数的出口
2,不断的递归调用自身
3,递归函数主体内容,即递归函数需要做的事情
ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根据不同的需要合并,比如,有时候递归函数的主体就是返回调用下层函数所得到的结果。
具体例子如下:
void fun(int n){ if(n<=0) return; //1 这是递归的终点,即出口 fun(n-1); //2、递归函数自身的调用 cout<
<n<<endl; 3 递归函数的主体内容}
2,3合并的情况
int fun(int n){ if(n<=0) return 0; return fun(n-1)+fun(n-2); //2 3合并}
</n<
c语言中的递归函数
1、用在出口条件上
if(n==1) return x;
if(n>1) x=(x+1)*fun(x,n-1);正确可以实现递归功能
2、用在出口条件和继续递归的调用上(实际上还是在出口条件)
if(n==1) return x;
if(x>1) return (x+1)*fun(x,n-1);正确这个也可以实现递归功能
3、在设置一个值,用这个值来判断,最终还是能实现递归
int m;
if(n==1) m=x;
if (n>1) m=(x+1)*fun(x,n-1);
return m;
万变不离其踪,return 永远用在函数的出口条件上,没有return就死循环了不是么?
当需要返回值时就return.程序因此不死循环。正不正确,运行一下通过就应该ok.
在c语言中如何使用递归函数
#include
int cube(int num);//你的立方函数的声明
void main()
{
int num = 3;//设置限制,是1的立方加到num的立方
printf("%d",cube(num));
}
int cube(int num)//递归函数
{
if(num==1) //从1的立方开始加.这是结束条件
return 0;
else
return cube(num-1) + num * num * num;
}
#include
int sumX3( int x)//递归函数
{
if(x==1) //结束条件
return 1;
else
return sumX3(x-1) + x*x*x;
}
main()
{
printf("%d\n" ,sumX3(2));
}
c语言递归函数一定要有return吗?为什么?
当无需返回值时那么不影响,存在返回值必须增加return
C 语言函数,只要不是 void 型函数,则都要返回值。
C 语言函数,只要不是 void 型函数,则都要返回值。
从来没有这种需求
递归的三个条件就是:
1,存在递归调用
2,有退出条件
3,有return值。
这是因为递归调用按照栈的方式,在没有达到退出条件的时候后面的函数也就无法执行return语句,这样就实现了每一层的return语句与这层函数相对应。
关于c语言递归函数的 求大神帮助 有悬赏
#include
unsigned long fib(int n){ if(n<2) { return n; } return fib(n-1)+fib(n-2);}int main(void) { int n; scanf("%d",&n); printf("%lu\n",fib(--n)); return 0;}
unsigned long fib(unsigned long n){ if(n<2) return n; else return fib(n-1)+fib(n-2); }a 递归函数
unsigned long fib(unsigned long n){ unsigned long a=0,b=1; while(n-->0) { a=b; b=a+b; } return a;}1.b迭代函数
c语言递归函数
递归具体用法其实就是让你把一个问题分解成很多个类似的情况,虽然你要解决这个问题非常难,莫名其妙,要你想几年,但是把他一直递归分解,就变成很好理解的单种情况,而你整个问题又是跟这个单种情况类似,把整个问题通过递归调用一层一层分解到最低级简单的那种情况,就是你所需要理解的了。
一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。
(引自谭浩强的C语言书里)
用递归法计算n!可用下述公式表示:
n!=1 (n=0,1)
n×(n-1)! (n>1)
具体如下long ff(int n)
{
long f;
if(n<0) printf("n<0,input error");
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return(f);
}
main()
{
int n;
long y;
printf("\ninput a inteager number:\n");
scanf("%d",&n);
y=ff(n);
printf("%d!=%ld",n,y);
}
较难题:一块板上有三根针,A,B,C。A针上套有64个大小不等的圆盘,大的在下,小的在上。如图5.4所示。要把这64个圆盘从A针移动C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。
具体如下move(int n,int x,int y,int z)
{
if(n==1)
printf("%c-->%c\n",x,z);
else
{
move(n-1,x,z,y);
printf("%c-->%c\n",x,z);
move(n-1,y,x,z);
}
}
main()
{
int h;
printf("\ninput number:\n");
scanf("%d",&h);
printf("the step to moving %2d diskes:\n",h);
move(h,'a','b','c');
}
从程序中可以看出,move函数是一个递归函数,它有四个形参n,x,y,z。n表示圆盘数,x,y,z分别表示三根针。move 函数的功能是把x上的n个圆盘移动到z上。当n==1时,直接把x上的圆盘移至z上,输出x→z。如n!=1则分为三步:递归调用move函数,把n-1个圆盘从x移到y;输出x→z;递归调用move函数,把n-1个圆盘从y移到z。在递归调用过程中n=n-1,故n的值逐次递减,最后n=1时,终止递归,逐层返回。当n=4 时程序运行的结果为:
c语言中递归法里面的return怎么用啊?求高手指点。。。
举个例子:fun (int n)
{int c;
if (n==1)
c=10;
else c=age(n-1) 2;
return c;}
main()
{printf("%d",age(5));}
说明:age()是个自定义函数,可以清楚看到,在主函数中调用了age()函数,在age()函数里面又调用了age()函数。当然你要使程序不做无限循环。这就形成了递归调用。
结束当前语句,进入一条语句(或循环)
递归中return 自己,就是自己调用自己,但是return传进去的参数已经在函数本身处理过了,反复调用直到处理完结果。
但是怎么出来呢?需要你在函数本身写一个出口,避免无限调用自己死循环。
C语言 递归函数
#include
int gnn(int e)
{
int j;
int last=1;
for(j=0;j
<e;j++)
{
last=10*last;
}
return last;
}
void fun(long int n,int N)
{
int next;
if(N<1)
{
printf("\"");
return;
}
else
{
next=n/gnn(N-1);
printf("%d",next);
fun(n%gnn(N-1),N-1);
}
}
void main()
{
long int n;
printf("请输入所要转换的数字:");
scanf("%d",&n);
int N=1;
long int k=n/10;
for(int i=0;k!=0;i++)
{
k=k/10;
N++;
}
printf("转换后的输出为: ");
printf("\"");
fun(n,N);
printf("\n");
//getch();
}
在VC++6.0上调试可以。
希望是这个。
O(∩_∩)O~
这个程序我们才做过的哈,就发给你吧
#include
int t;
void main()
{
int num, p(int num);
scanf ("%d", &num);
t = num;
printf ("=%d\n", p(num));
}
int p(int num)
{
int sum;
extern t;
if (num < 10)
{
sum = num;
printf ("%d+", num);
}
else
{
sum = p(num/10) + num%10;
printf ("%d", num%10);
if (5 != num)
printf ("+");
}
return(sum);
}
试过的,能行哈。希望对你有帮助。当然还有其他的方法,还需自己摸索
#include "stdio.h"
char s[20]={0};
int i=19;
/*方法一:用全局变量和数组*/
void fun(int n)
{ if(n>0)
{
s[--i]=n%10+'0';
fun(n/10);
}
}
/*方法二,用静态变量和指针形参*/
void fun2(int n,char *str)
{
static int k=0;
if(n>0)
{
fun2(n/10,str);
str[k++]=n%10+'0';
}
}
int main( )
{ char str[20]={0};
/*方法一测试*/
fun(1234567);
/*方法二测试*/
fun2(1234567,str);
printf("%s\n\n",s+i);
printf("%s\n",str);
return 1;
}
超简单的程序,呵呵
#include
void shift(int x)
{
if(x/10==0)
{ printf("%2d",x%10);}
else
{
shift(x/10);
printf("%2d",x%10);
}
}
void main()
{
int a;
printf("input a number:");
scanf("%d",&a);
shift(a);
}
//方法一,不需将转换后的字符存储在字符数组中
#include
void change(int );
int main()
{
int n;
scanf("%d",&n);
change(n);
printf("\n");
return 0;
}
void change(int num)
{
if(num==0)return ;
change(num/10);
printf("%d",num%10);
}
//方法二,先将转换后的字符存储在字符数组中
#include
#define LEN 100
int m=0;
void change(int ,char *);
int main()
{
int n,i;
char a[LEN];
for(i=0;i
<len;i++)
a[i]='\0';
scanf("%d",&n);
change(n,a);
printf("%s",a);
printf("\n");
return 0;
}
void change(int num,char *s)
{
if(num==0)return ;
change(num/10,s);
s[m++]=(char)(num%10+'0');
}
</len;i++)
</e;j++)
C语言中 递归函数 的return 返回值问题
所谓函数返回值是一个函数在运算结束以后向调用它的母函数或者系统反馈一个值,这个值可以是各种变量类型.
举个简单的例子:
int
add(int
a,int
b)
{
return
(a+b);
}
int
main()
{
int
res;
res=add(3,4);
printf("%d",res);
return
0;
}
在主函数main中调用子函数add,并传递参数3和4过去,add经过运算后得到值7,通过return语句将得到的值返回给调用它的main函数供其使用,而在main中,返回值被用于给res赋值。
函数返回值就可以理解为解决一个问题以后得到的结论,把这个结论交给别人,就像写在书上成为一个定理,来让别人使用。
如果你在函数定义的复合语句前使用了void
则什么都不返回;如果没有void,返回的是null,要显示的话将什么也不会显示。一般要接收返回的值,还要建立一个接受数值来执行行为的函数。
return
表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定。
return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。
如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。
return语句后面具体是什么内容,这就要具体情况具体分析了:
(1)
在返回类型是char的函数中,return后应该是char类型的值;
(2)
在返回类型是int的函数中,如果是要停止函数的调用,最好应该为0;其他的按照你的目的而定,只要是int
类型就行了
(3)
在返回类型是结构类型的函数中,return后应该是结构的一个实例对象。
总之,函数定义为什么样的返回类型,该函数中return后就应该是相应类型的值。