c语言递归算法怎么写

1.c语言递归算法

利用递归算法求5!。

1.程序分析:递归公式:fn=fn_1*4!

2.程序源代码:

#include "stdio.h"

main()

{

int i;

int fact();

for(i=0;i<5;i++)

printf("\40:%d!=%d\n",i,fact(i));

}

int fact(j)

int j;

{

int sum;

if(j==0)

sum=1;

else

sum=j*fact(j-1);

return sum;

}

2.c语言中的递归

原发布者:zhoujiahaohao2

1.编写计算X的Y次幂的递归函数getpower(intx,int),并在主程序中实现输入输出。#include"stdio.h"longgetpower(intx,inty){if(y==1)returnx;elsereturnx*getpower(x,y-1);}voidmain(){intnum,power;longanswer;printf("pleaseinputanumber:");scanf("%d",&num);printf("pleaseinputthenumber'spowerseries:");scanf("%d",&power);answer=getpower(num,power);printf("结果是:%ld\n",answer);}结果说明:输入61再输入5求得61的5次幂为844596301.2编写计算学生年龄的递归函数。#includeintage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;returnc;}voidmain(){intn=5;printf("thefivestudent'sageis:%dyearsold\n",age(n));}结果说明:第五个学生的年龄为18岁。3.编写递归函数实现Ackman函数。#includeAcm(intm,intn){if(m==0)returnn+1;elseif(n==0)returnAcm(m-1,1);elsereturnAcm(m-1,Acm(m,n-1));}intmain(){printf("Acm(2,1)=%d\n",Acm(2,1));printf("Acm(3,2)=%d\n",Acm(3,2));return0;}结果说明:利用递归函数求得Acm(2,1)=5,Acm(3,2)=29.实验小结:

3.C语言什么是递归方法

编程里面估计最让人摸不着头脑的基本算法就是递归了。

很多时候我们看明白一个复杂的递归都有点费时间,尤其对模型所描述的问题概念不清的时候,想要自己设计一个递归那么就更是有难度了。今天我也花费了半个小时来搞明白二叉树的平衡性的递归模型,首先我不明白什么叫做平衡性,所以花费的时候大部分实在试探理解平衡性的含义。

在搞明白的时候,我突然想到假如让我来设计,在我知道平衡性的前提下,我是否可以建立如此简洁的递归模型。为此,我遇到的问题是我们到底在什么情况下适用递归模型,并且递归模型如何建立。

数学都不差的我们,第一反应就是递归在数学上的模型是什么。毕竟我们对于问题进行数学建模比起代码建模拿手多了。

(当然如果对于问题很清楚的人也可以直接简历递归模型了,运用数模做中介的是针对对于那些问题还不是很清楚的人) 自己观察递归,我们会发现,递归的数学模型其实就是归纳法,这个在高中的数列里面是最常用的了。回忆一下归纳法。

归纳法适用于想解决一个问题转化为解决他的子问题,而他的子问题又变成子问题的子问题,而且我们发现这些问题其实都是一个模型,也就是说存在相同的逻辑归纳处理项。当然有一个是例外的,也就是递归结束的哪一个处理方法不适用于我们的归纳处理项,当然也不能适用,否则我们就无穷递归了。

这里又引出了一个归纳终结点以及直接求解的表达式。如果运用列表来形容归纳法就是:步进表达式:问题蜕变成子问题的表达式 结束条件:什么时候可以不再是用步进表达式 直接求解表达式:在结束条件下能够直接计算返回值的表达式 逻辑归纳项:适用于一切非适用于结束条件的子问题的处理,当然上面的步进表达式其实就是包含在这里面了。

这样其实就结束了,递归也就出来了。递归算法的一般形式: void func( mode) { if(endCondition) { constExpression //基本项 } else { accumrateExpreesion /归纳项 mode=expression //步进表达式 func(mode) / /调用本身,递归 } }最典型的就是N!算法,这个最具有说服力。

理解了递归的思想以及使用场景,基本就能自己设计了,当然要想和其他算法结合起来使用,还需要不断实践与总结了。例如:返回一个二叉树的深度:int depth(Tree t){ if(!t) return 0; else { int a=depth(t.right); int b=depth(t.left); return (a>b)?(a+1):(b+1); } } 判断一个二叉树是否平衡:int isB(Tree t){ if(!t) return 0; int left=isB(t.left); int right=isB(t.right); if( left >=0 && right >=0 && left - right <= 1 || left -right >=-1) return (left

纯递归问题的难易主要纠结于一些条件表达式的构造以及初值的设置(上面的为直接表达式值的设定)。 最后需要补充的是,很多不理解递归的人,总认为递归完全没必要,用循环就可以实现,其实这是一种很肤浅的理解。

因为递归之所以在程序中能风靡并不是因为他的循环,大家都知道递归分两步,递和归,那么可以知道递归对于空间性能来说,简直就是造孽,这对于追求时空完美的人来说,简直无法接接受,如果递归仅仅是循环,估计现在我们就看不到递归了。递归之所以现在还存在是因为递归可以产生无限循环体,也就是说有可能产生100层也可能10000层for循环。

例如对于一个字符串进行全排列,字符串长度不定,那么如果你用循环来实现,你会发现你根本写不出来,这个时候就要调用递归,而且在递归模型里面还可以使用分支递归,例如for循环与递归嵌套,或者这节枚举几个递归步进表达式,每一个形成一个递归。

4.c语言递归算法

用递归法计算n!用递归法计算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);}程序中给出的函数ff是一个递归函数。

主函数调用ff 后即进入函数ff执行,如果n<0,n==0或n=1时都将结束函数的执行,否则就递归调用ff函数自身。由于每次递归调用的实参为n-1,即把n-1的值赋予形参n,最后当n-1的值为1时再作递归调用,形参n的值也为1,将使递归终止。

然后可逐层退回。下面我们再举例说明该过程。

设执行本程序时输入为5,即求5。在主函数中的调用语句即为y=ff(5),进入ff函数后,由于n=5,不等于0或1,故应执行f=ff(n-1)*n,即f=ff(5-1)*5。

该语句对ff作递归调用即ff(4)。进行四次递归调用后,ff函数形参取得的值变为1,故不再继续递归调用而开始逐层返回主调函数。

ff(1)的函数返回值为1,ff(2)的返回值为1*2=2,ff(3)的返回值为2*3=6,ff(4)的返回值为6*4=24,最后返回值ff(5)为24*5=120。

5.计算1!+2!+

这个东西关键是递归算法的确定,需要一点数学知识。

#include

//递归计算函数

int calc(int x)

{

if (x if (x == 1)

{

return 1;

}

else if (x == 2)

{

return 3;

}

else

{

return (x+1)*calc(x-1)-x*calc(x-2);//核心数学算法

}

}

int main(int argc, char* argv[])

{

//测试,输出1到10的结果

for (int i=1; i{

printf("==== i = %d ====\n", i);

printf("calc = %d\n\n", calc(i));

}

return 0;

}

6.c语言递归排序怎么写、

#include<stdio.h>

void main(){

int a,b;

printf(“请输入所求阶乘的数a:\n");

scanf("%d",&a);

fun(&a);

printf("所得a的阶乘为:\n”);

int fun(int a){

int a;

if(a==0)

a=1;

esle

a=fun(n)*fun(n-1);

return a;

}

}

试一下吧,生疏了

7.使用递归算法求n

#include <stdio.h>

long factorial(long n)

{

if (n == 0 || n == 1)

return 1;

else

return n * factorial(n-1);

}

int main(void)

{

int n = 0, i = 0;

long sum = 0;

printf("Please input a number: \n");

scanf("%d", &n);

printf("%d! = %lu\n", n, factorial(n));

return 0;

}

c语言递归算法怎么写

转载请注明出处育才学习网 » c语言递归算法怎么写

知识

cusion音标怎么写

阅读(242)

本文主要为您介绍cusion音标怎么写,内容包括问一个关于音标的问题A,E,I,O,U,请用这9个音标组十词[急]E[i:][e]I[ai][i]O[&#601;u][&#596;:][&#596;]U[ju:],音标卡怎么做。a: for /ei/: base,case, change,game, label; for /

知识

数理化建模论文怎么写

阅读(227)

本文主要为您介绍数理化建模论文怎么写,内容包括物理建模论文怎么写,数学建模论文范文怎么写我是一高中生参加了那个数理化大赛要交一篇,数学建模论文范文怎么写。仔细看看吧,希望对你有帮助物理建模论文格式(一)论文形式:科学论文科学论文是对

知识

三年级成绩分析怎么写

阅读(274)

本文主要为您介绍三年级成绩分析怎么写,内容包括小学三年级语文试卷分析怎么写,三年级卷面分析怎么写,成绩分析怎么写。试卷结构本学期三年级语文试卷,考试时间为90分钟,卷面分值为100分。由五大块组成,第一部分为珍珠落玉盘;第二部分为滴水回

知识

emailaddress怎么写

阅读(284)

本文主要为您介绍emailaddress怎么写,内容包括电子邮件地址怎么写,email地址怎么写,正确的Email地址的格式是什么。如果不明白电子邮件地址怎么写,可参考以下标准的电子邮箱格式:电子邮箱格式通常以类似guangjia@mail.com出现,前面的guan

知识

c中定义抽象类怎么写

阅读(221)

本文主要为您介绍c中定义抽象类怎么写,内容包括C++中抽象类的定义,c#中定义一个抽象类,里边有两个虚方法,虚函数,分别求周长和面,用C++编写抽象类的问题。定义:在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样

知识

c语言循环语句怎么写

阅读(228)

本文主要为您介绍c语言循环语句怎么写,内容包括C语言循环语句用法,C语言中的循环语句怎么写啊,C语言中循环语句循环语句怎么写怎么设定。原发布者:西伯利亚小774三种基本的循环语句:for语句、while语句和do-while语句。循环语句(一)、for循环它

知识

android自动代码怎么写

阅读(217)

本文主要为您介绍android自动代码怎么写,内容包括android程序里如何编写下载代码,如何做androidstudio自动生成代码插件,androidstudio怎么写代码。1.介绍 在使用Android Studio开发的时候,大部分人都会使用一些插件来提高开发效率,比如:Butte

知识

ipqc的转正总结怎么写

阅读(230)

本文主要为您介绍ipqc的转正总结怎么写,内容包括电子厂IPQC转正总结部门中存在的不足怎么写,IPQC转正心德怎么写啊求大仙,,,,电子厂的ipqc工作总结怎么写入职3个月,转正经理要求写,求好心。强调责任心、检查与管理的重要。没有范文。以下供

知识

灿的笔画顺序怎么写的

阅读(245)

本文主要为您介绍灿的笔画顺序怎么写的,内容包括灿字的笔画顺序怎么写的,灿的笔画顺序怎么写的,灿字的笔画顺序怎么写的。灿字的笔顺是点、撇、撇、点、竖、竖折/竖弯、竖。

知识

草体煦怎么写

阅读(216)

本文主要为您介绍草体煦怎么写,内容包括熙字草书写法,草体字怎么写,草体怎么写。熙字的草书写法:腾祥伯当草书2、李洤标准草书书法3、于右任标准草书4、博洋草书3500草书有章草、今草、狂草之分。草书又称一笔书:所谓“

知识

三叶日文怎么写

阅读(257)

本文主要为您介绍三叶日文怎么写,内容包括《你的名字》中女主宫水三叶用日文怎么读求罗马音和日文书写谢,三叶的日语怎么说,请问立花泷和宫水三叶分别用日语写出来,请问又来为日语大神来帮一。宫水三叶みやみず 宫水 みつは三叶 miyamizu米

知识

陕西最难写的字怎么写

阅读(235)

本文主要为您介绍陕西最难写的字怎么写,内容包括陕西有个什么面,那个字很难写,怎么写啊,陕西的最难写的是什么字,西安最难写和最难念的字。Biángbiáng面(汉语拼音:Biángbiáng miàn,biang字是一个合字,有多种写法,均无法输入电脑,常被代替写

知识

亭字隶书怎么写

阅读(270)

本文主要为您介绍亭字隶书怎么写,内容包括婷字的隶书怎么写,亭的草体字怎么写,飞翔亭隶书怎么写。汉字经过了6000多年的变化,其演变过程是: 甲骨文 → 金文 → 小篆 → 隶书 → 楷书 → 行书 (商) (周) (秦) (汉)

知识

小数字后面大写怎么写

阅读(215)

本文主要为您介绍小数字后面大写怎么写,内容包括大写小数点后面的怎么写,小数位大写怎么写,数字的大写写法,比如2603044元大写的正确写法是什么。大写数字:壹、贰、叁、肆、伍、陆、柒、捌、玖、拾。中文数字,是中文使用的数字系统,在阿拉伯数

知识

c语言循环语句怎么写

阅读(228)

本文主要为您介绍c语言循环语句怎么写,内容包括C语言循环语句用法,C语言中的循环语句怎么写啊,C语言中循环语句循环语句怎么写怎么设定。原发布者:西伯利亚小774三种基本的循环语句:for语句、while语句和do-while语句。循环语句(一)、for循环它

知识

易语言制牌照怎么写

阅读(277)

本文主要为您介绍易语言制牌照怎么写,内容包括易语言怎么写程序注册与登陆,车牌号码格式怎么写,易语言写二进制、八进制、十进制、十六进制代码怎么写。.版本 2.程序集 窗口程序集1.程序集变量 特征码.程序集变量 注册, 文本型.程序集变量

知识

华丽的语言后面怎么写

阅读(209)

本文主要为您介绍华丽的语言后面怎么写,内容包括华丽的语言后面怎么写,这段话用华丽的语言来表达该怎么说,如何写出华丽的语句。是个女生啊建议你可以看些小说,我就常看明晓溪写的,里面尽是华丽丽的语句。也可以看些别的作者写的,都很不错的(既

知识

c语言结构体怎么写

阅读(242)

本文主要为您介绍c语言结构体怎么写,内容包括c语言中如何定义一个结构体,c语言中结构体怎么写,C语言的结构体要怎么写结构体里面有那些东西谢谢举实例谢谢大家。struct name{int x;double y;type a;type b;}用的时候要用struct name c;c.x

知识

linux下c语言编程两个进程怎么写

阅读(288)

本文主要为您介绍linux下c语言编程两个进程怎么写,内容包括Linux下C语言编写程序创建3个进程,三个进程分别完成不同的事情,写一个linux下写个关于c语言的双守护进程,就是监视一个进程,当其,linux下c语言pipe无名管道main函数创建两个进程p1

知识

怎么看一个网站是用什么语言写的

阅读(229)

本文主要为您介绍怎么看一个网站是用什么语言写的,内容包括怎样看一个网站是用什么语言写的,怎么看一个网站是用什么语言来写的呢,怎么看一个网站是用什么语言编写出来的。首先看他的网页后缀 比较明显的是 asp aspx php jsp do这些 当然这

知识

怎么查看网站语言写的

阅读(201)

本文主要为您介绍怎么查看网站语言写的,内容包括怎么查看一个网站是用什么语言写的,怎么看一个网站是用什么语言写的,怎么知道网站用什么语言写的。判断网站使用的语言一般为:1.查看网站后缀名,也就是看网页的后缀名,如:asp的是用vbscript,aspx

知识

寄快递的语言怎么写

阅读(242)

本文主要为您介绍寄快递的语言怎么写,内容包括快递宣传语怎么写最新,寄快递怎么写地址,快递单上给快递员的话语怎么写。速递界的赤兔马。 2、使命安然

[/e:loop]