递归函数c语言 递归函数c语言求和

2025-04-07 00:43 - 立有生活网

c语言中函数能递归吗?

C-->B----hanoi(1,'C', 'A', 'B')

C语言可以递归调用,但是(函数)不能嵌套定义。

递归函数c语言 递归函数c语言求和递归函数c语言 递归函数c语言求和


递归函数c语言 递归函数c语言求和


例如:

int fact(int n)

{if (n == 0)

return 1;

e一个框架搭起来了,可以解决一批相同结构的问题。lse

return n fact(n - 1);

}图中的递归调用是允许的。

void foo()

{void bar()

{// Some code

}}这样在函数内定义函数是不允许的。 不过结构体是可以嵌套定义的,例如:

struct test {

int a;

struct demo {

};

};这样在结构体内定义结构体,是可以的。

C语言中递归函数是,非递归函数是?能否举例子?

自己调用自己的函数叫递归函数,比如:

A()printf("ninput number:n");而:

{A();

}非递归函数不自己调用自己,比如:

A()

{..........

}

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-->%cn",x,z);

else

{move(n-1,x,z,y);

printf("%c-->%cn",x,z);

move(n-1,y,x,z);

main()

{int h;

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语言递归函数

char b;

阶乘

递归求

的吧,不过你写的有问题,函数既然接受

形参

n,在函数里就不用再读取了;而且函数返回的是long类型,应该

强制转换

返回值

这样吧,你不要管什么递归,你自己想一下,不用递归,怎么解这个问题,得出的思路肯定就恰好是递归的过程

这个是要用图来说明的…一画图什么都明白了

对于递归,我打个比方吧!

就像一根缠绕着的铁链,知道从个环就能解开,但是现在只能拿到一个环,所以就必须从一个环顺着链条往头找,直到找到个,就相当于找到递归的跳出条件了

例子不是很恰当

不明白的话,留言,一定给你讲清楚…留言比回

这是道汉诺塔的题目

hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

意思是说

1)如果我把上面的 n-1个元素放到第二个柱子上

2)那么我就可以把最下面的棋子放到第三个柱子上

3)然后我再把第二个柱子上的n-1个棋放到第三个柱子上

第二个参数是源地址,第四个参数是目标地址,第三个参数是暂存地址。

分成三组:

(一),

目的:将1号和2号从A移到B

调用函数:hanoi(2,'A', 'C', 'B')。

在hanoi(2,'A', 'C', 'B')中递归调用如下:

A-->C----hanoi(1,'A', 'B', 'C')

A-->B----hanoi(1,'A', 'C', 'B')

(二),

目的:将3号从A移到C

调用函数:hanoi(1,'A', 'B', 'C')

(三),

目的:将1号和2号从B移到C

调用函数:hanoi(2,'B', 'A', 'C')

在hanoi(2,'B', 'A', 'C')中递归递归如下:

B-->A----hanoi(1,'B', 'C', 'A')

B-->C----hanoi(1,'B', 'A', 'C')

A-->C----hanoi(1,'A', 'B', 'C')

=====================

总共调用了7次函数,

只要hanoi()的个参数大于1,它就会在内部调用自身3次,“直到个参数=1,然后调用printf()”。

hanoi(n, ...)调用hanoi(1, ...)的次数为2的n次方减去一。

我做了个图,如果需要将你的EMAIL地址发过来。

c语言递归函数

比如说,到了p(2),执行到else return p(n-1);后进入p(1)直接返回1,(返回1并不执行任何作,相当于一段代码的结束),然后执行p(2)接下来的语句printf("%d",2-1);输出1,所以输出的是1,然后依次输出到n-1,返回的n被主函数中的printf输出,故此函数实现了N到1的输出。递归可以理解为函数嵌套

好的我帮你你分析以下你的程序:

1 调用是age(5) 它再调用age(4),然后返回age(4)+2

2 age(4)过程中调用age(3),然后返回age(3)+2

5 在printf("%d",f(a));age(1)过程中,直接返回10的值。

由上过程可以看出递归深度是5,

那么:age(5)=age(4)+2

age(4)=age(3)+2

age(3)=age(2)+2

age(2)=age(1)+2

age(1)f(int i)=10

所以 age(5)=18

讲一下c语言中递归函数的使用方法

楼上的同志将递归的定义解释得已经很清楚了,但是你想要真正了解什么是函数递归,先了解什么是递归!然后对于函数递归就豁然开朗了!

相当于循环,要有判断条件,传递进去的参数要变化,满足条件调用自身,不满足条件就开始一层一层返回。简单例子:

int f(int Fib(0) is 0 [base case]i){

int sum=0;

if(i>0) sum+=f(i-1);

return sum;

}main(){

int a=10;

}

C语言中如何从递归函数中退出呢!

这仅仅是一个单向递归,深度是单向延伸的。还有向广度延伸的

递归是对递推关系的模拟;

了解了这些情况,你就可以着手写代码了。

这样的代码,自然就,以递归函数实现,最方便了。

1)那种可以,直接解决问题的情况,自然就是直接返回的条件了。

2)那种需要递推,才可以解决的,自然就写成,递归调用了。

3)那种实际的,执行代码,自然就夹在,递归调用之间,写出来了。

写递归函数,主要分析,

1)何时结束

2)何时递归调用

3) 执行任务的代码写在哪里。4 在age(2)过程中调用age(1),然后返回age(1)+2

递归调用本身,并不是解决,实际问题的方案。只是解决复杂结构问题的,一种方法。

解决实际问题时,要结合所执行的任务来写代码。

比如,树的遍历。

递归只是个框架,执行遍历本身要干什么,比如打印数据,这才是递归函数的任务。

然而一个空的框架,什么问题也解决不了。即使搭的再好,也无用。

递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

需要设置一个退出的条件,比如

{if(i==0)

return;

else

{f(i-1);

这样当i递减到0的时候,就不会再继续递归了

对递归函数中的某一关键变量设置阈值条件。

c语言中,什么是函数的递归,能举个例子么

A-->C

(PS:因为很多IT术语的定义都来源于国外,我们看的中文大部分是别人看了国外的文献然后以他的中文素养加以解释的!但是中华语言博大精深!而英语就较为简单了,记得上次看高德纳的《surreal number》时候,文中有一句“the beginning of the world”,而作者译为“万物初始”,从这里就可见一斑了!所以,对于一些不是很明白的IT术语,可以去看一下英文翻译,可能会对你有帮助)递归的英文是recursion,有循环的意思。

3 在age(3)过程中调用age(2),然后返回age(2)+2

能够形成函数递归,该函数要有两个属性:

1.A base case (or cases), and

2.A set of rules which reduce all other cases toward the base case.

For example, the following is a recursive definition of a person's ancestors:

One's parents are one's ancestors (base case).

The parents of one's ancestors are also one's ancestors (recursion step).

The Fibonacci sequence is a classic example of recursion:

Fib(1) is 1 [base case]

For all integers n > 1: Fib(n) is (Fib(n-1) + Fib(n-2)) [recursive definition]

递归就是在过程或函数里调用自身。在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

int rev(int i)

{if(i<5) rev(i++);

else return i;

}

int rev(int i)

{if(i<5) rev(i++);

else return i;

}

卓有成效的同义词_卓有成效是什么词性

四级单词,很难背啊! 16、大海真是变幻莫测,有时波涛汹涌;有时波光粼粼;有时风平浪静。 现在努力,只要方法得当,一个月不白费,能行。不过没有一个月了,还有三个礼拜,加油啊。 卓有成效···

天津市小汽车摇号_天津市小汽车摇号查询结果

2022天津普通小客车专项摇号活动指南(天津市小客车摇号新政策) 》》》2022天津普通小客车专项摇号活动指南 天津市小汽车摇号_天津市小汽车摇号查询结果 天津市小汽车摇号_天津市小汽车摇号···

什么叫更年期 什么叫更年期高血压

更年期的症状是什么样? 人生过程,机体退化了,性格、健康明显变化了,年龄45-65之间吧 更年期症状包括: 什么叫更年期 什么叫更年期高血压 什么叫更年期 什么叫更年期高血压 1.潮热和出汗···