递归算法c语言实例(C语言递归算法)

2024-07-03 06:26:49 33

递归算法c语言实例(C语言递归算法)

本文目录

C语言递归算法

本人学c++,c的语法已经淡忘了,但是递归不管什么语言都是一个原理其实简单一点来说就像数学里面的数列的通项公式:例如一个数列是2,4,6,8,10......很容易就可以得到通项公式是a+2 n是大于1的整数其实这就是一个递归的形式,只要你知道初始项的值,未知项和前几项之间的关系就可以知道整个数列。程序例子:比如你要得到第x项的值普通循环:for(int i=1; i《=n; i++) if (i == x) cout 《《 2*i; /*cout 相当于 c里面的printf,就是输出.*/递归:int a(int x) { if (x = 1) return 2; /* 第一项那肯定是2了,这个也是递归的终止条件! */ else return a(x-1)+2; /* 函数自身调用自身是递归的一个特色 */比如x=4,那么用数学表示就是a(4)=a(3)+2=(a(2)+2)+2=((a(1)+2)+2)+2其实递归方法最接近自然,也是最好思考的一个方法,难点就是把对象建模成递归形式,但是好多问题本身就是以递归形式出现的。普通递归就是数据结构上的堆栈,先进后出。例如上面x=4,把a(4)放入栈底,然后放入a(3),然后a(2),a(1),a(1)的值已知,出栈,a(1)=2,a(2)出栈a(2)=a(1)+2=2+2=4,a(3)出栈a(3)=a(2)+2=(a(1)+2)+2=6,a(4)出栈a(4)=a(3)+2=(a(2)+2)+2=((a(1)+2)+2)+2=8再比如楼上的阶乘例子,当n=0 或 1时,0!=1,1!=1,这个是阶乘的初始值,也是递归的终止条件。然后我们知道n!=n*(n-1)!,当n》1时,这样我们又有了递归形式,又可以以递归算法设计程序了。(楼上已给出谭老的程序,我就不写了)。我给出一种优化的递归算法---尾递归。从我给出的第一算法可以看出,先进栈再出栈,递归的效率是很低的。速度上完全比不上迭代(循环)。但是尾递归引入了一个新的函数参数,用这个新的函数参数来记录中间值.普通递归阶乘fac(x),就1个x而已,尾递归用2个参数fac(x,y),y存放阶乘值。所以谭老的程序就变成// zysable’s tail recursive algorithm of factorial.int fac(int x, int y) { if (x == 1) return y; else return fac(x-1, y*x);}int ff(int x) { if (x == 0) return 1; else return fac(x,1);}对于这个程序我们先看函数ff,函数ff其实是对fac的一个封装函数,纯粹是为了输入方便设计的,通过调用ff(x)来调用fac(x,1),这里常数1就是当x=1的时候阶乘值了,我通过走一遍当x=3时的值即为3!来说明一下。首先ff(3),x!=0,执行fac(3,1).第一次调用fac,x=3,y=1,x!=1,调用fac(x-1,y*x),新的x=2,y=3*1=3,这里可以看到,y已经累计了一次阶乘值了,然后x还是!=1,继续第三次调用fac(x-1,y*x),新的x=1,y=2*3=6,然后x=1了,返回y的值是6,也就是3!.你会发现这个递归更类似于迭代了。事实上我们用了y记录了普通递归时候,出栈的乘积,所以减少了出栈后的步骤,而且现在世界上很多程序员都在倡议用尾递归取消循环,因为有些在很多解释器上尾递归比迭代稍微效率一点.基本所有普通递归的问题都可以用尾递归来解决。一个问题以递归来解决重要的是你能抽象出问题的递归公式,只要递归公式有了,你就可以放心大胆的在程序中使用,另外一个重点就是递归的终止条件;其实这个终止条件也是包含在递归公式里面的,就是初始值的定义。英文叫define initial value. 用普通递归的时候不要刻意让自己去人工追踪程序,查看运行过程,有些时候你会发现你越看越不明白,只要递归公式转化成程序语言正确了,结果必然是正确的。学递归的初学者总是想用追踪程序运行来让自己来了解递归,结果越弄越糊涂。如果想很清楚的了解递归,有种计算机语言叫scheme,完全递归的语言,因为没有循环语句和赋值语句。但是国内人知道的很少,大部分知道是的lisp。好了,就给你说到这里了,希望你能学好递归。PS:递归不要滥用,否则程序极其无效率,要用也用尾递归。by 一名在美国的中国程序员zysable。

c语言 设计一个递归算法

这哪是一个递归算法,这么多个: 给你设计其中一个:这是递归得到数组a【】的前k个元素的最大值 int max(int a,int k) { if(k==2)return(a》a?a:a); else return max(a,k-1)》a; } main() { int t, b={1,2,3,4,5,6,7,8}; t=max(b,8); printf(“%3d“,t); getch(); }

C语言 用递归方法求X的n次方

#include《stdio.h》

int power(int x,int n)

{

if(n==0)

return 1;

elseif(n%2==1)

return x*power(x,n-1);

else{

int y=power(x,n/2);

return y*y;

}

}

int main()

{

int a,b,c;

printf(“enter x and n:“);

setvbuf(stdout,NULL,_IONBF,0);

scanf(“%d%d“,&a,&b);

c=power(a,b);

printf(“结果为%d“,c);

return 0;

}

扩展资料

#include《stdio.h》

double power(double x,int n);

main()

{

double x;

int n;

printf(“Input x,n:“);

scanf(“%lf,%d“,&x,&n);

printf(“%.2lf“,power(x,n));

}

double power(double x,int n)

{

double a=1.0;

int i;

for(i=1;i《=n;i++)

a*=x;

return a;

}

参考资料:百度百科 - 递归调用

c语言算n的阶乘的递归算法

思路:递归求阶乘函数,如果输入的参数等于1则返回1,否则返回n乘以该函数下次递归。

参考代码:

#include《stdio.h》int fun(int n){ if(n==1||n==0) return 1;//如果参数是0或者1返回1 return n*fun(n-1);//否则返回n和下次递归的积}int main(){ int n; scanf(“%d“,&n); printf(“%d\n“,fun(n)); return 0;}/*5120*/

C语言迭代与递归比较(举例)

我举个例子:①斐波那契数列:1,1,2,3,5,8,13,21,34......迭代:int Fib;}递归:int Fib(int n){ if(n==0||n==1)return 1; else return (Fib(n-1)+Fib(n-2));}

c语言,求递归算法的技巧最好有经典例子!

c语言中递归的最经典应用是求两个数的最小公约数,代码如下:int MinDivisor( int m, int n){ if(m%n==0) return n; else return MinDivisor(n, m%n);}

递归算法c语言实例(C语言递归算法)

本文编辑:admin

更多文章:


excel需要掌握的基本知识(excel需要掌握哪些知识点 Excel的知识点介绍)

excel需要掌握的基本知识(excel需要掌握哪些知识点 Excel的知识点介绍)

本文目录excel需要掌握哪些知识点 Excel的知识点介绍excel基础知识大全 有关Excel的基础知识excel需要掌握的基本知识基本掌握excel、word哪些内容EXCEL软件主要学习那些内容学excel必须学哪些东西Excel有

2024年6月29日 02:05

危险爱人沈哲怎么死的?《我的时代,你的时代》中的沈哲,为何那么受欢迎

危险爱人沈哲怎么死的?《我的时代,你的时代》中的沈哲,为何那么受欢迎

本篇文章给大家谈谈沈哲,以及危险爱人沈哲怎么死的对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录危险爱人沈哲怎么死的《我的时代,你的时代》中

2024年8月12日 07:30

实时新闻热点(哪个网站可以看到还在的新闻)

实时新闻热点(哪个网站可以看到还在的新闻)

大家好,如果您还对实时新闻热点不太了解,没有关系,今天就由本站为大家分享实时新闻热点的知识,包括哪个网站可以看到还在的新闻的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录哪个网站可以看到还在的新闻实时热点怎么关免费

2024年7月15日 17:50

颜色大全图片及名称幼儿园(幼儿园活动室墙面颜色可以有哪些种)

颜色大全图片及名称幼儿园(幼儿园活动室墙面颜色可以有哪些种)

本文目录幼儿园活动室墙面颜色可以有哪些种幼儿园美术课件:《认识颜色》大班幼儿对颜色的认识幼儿园关于颜色的知识幼儿园色彩选择哪些比较好幼儿园小班《认识颜色》教案幼儿园小班,中班,大班各年级所对应的舒适性颜色及该色彩对应的功能是什么幼儿园作业事

2024年5月5日 17:55

教师评语?老师评教评语怎么写

教师评语?老师评教评语怎么写

本文目录教师评语老师评教评语怎么写教师评语简短老师评语怎么写教师评价老师的评语教师评语1.你性格沉静,常常不拘小节,待人接物却稳重大方。平日里言语并不多,但我知道你心志高远,骨子里一种倔强和坚忍。你上进心强,刻苦钻研,在困难面前不屈不挠,勇

2024年7月13日 09:35

astor组合(astro成员的外号是什么)

astor组合(astro成员的外号是什么)

这篇文章给大家聊聊关于astor组合,以及astro成员的外号是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录astro成员的外号是什么astro怎么少了一个人astro组合怎么读astro成员的外号是什么ASTRO是F

2024年7月17日 02:35

如何将webp的格式转变为png格式(微信公众号存下来的照片是.webp的格式,怎么弄)

如何将webp的格式转变为png格式(微信公众号存下来的照片是.webp的格式,怎么弄)

“如何将webp的格式转变为png格式”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看如何将webp的格式转变为png格式(微信公众号存下来的照片是.webp的格式,怎么弄)!本文目录微信公众号存下来的照片是.webp的格式

2024年8月12日 19:45

mandatory怎么读(外国人把中文说成mandarin是怎么回事)

mandatory怎么读(外国人把中文说成mandarin是怎么回事)

本文目录外国人把中文说成mandarin是怎么回事英语Mandatory怎么翻译英语Mandatory:no怎么翻译mandatory什么意思在数据表mandatory表示什么意思外国人把中文说成mandarin是怎么回事最早以前是英国人称

2024年7月11日 06:17

uikit tools(uikit tools是什么)

uikit tools(uikit tools是什么)

本文目录uikit tools是什么cydia卸载uikit tools后cydia打不开,重启后无限白苹果怎么办,求解在线等,很急啊uikit tools是什么uikit tools是cydia的系统更新工具。cydia是iPhone、i

2024年7月24日 15:11

命名空间被当做类型使用(关于vs2008中c#命名空间和类的问题)

命名空间被当做类型使用(关于vs2008中c#命名空间和类的问题)

本文目录关于vs2008中c#命名空间和类的问题vc2010 c# Program.cs 错误 CS0118: “Form1“是“命名空间“,但此处被当做“类型“来使用C#错误 1 “StreamReader”是“命名空间”,但此处被当做“

2024年5月26日 14:05

网页在线生成(如何将网页转化为app)

网页在线生成(如何将网页转化为app)

本文目录如何将网页转化为appskype网页在线代码怎么生成方法详解请问做出了电子杂志,怎么生成在线的,制作成网页阅读的那种有自己的服务器如何将网页转化为app你要是想直接转化成一个成熟、系统的APP是不可能的,网页代码是网页代码,APP代

2024年7月9日 23:52

ps滚动条怎么设置(ps软件如何让显示下面的横向滚动条,现在图片足够的大了)

ps滚动条怎么设置(ps软件如何让显示下面的横向滚动条,现在图片足够的大了)

大家好,ps滚动条怎么设置相信很多的网友都不是很明白,包括ps软件如何让显示下面的横向滚动条,现在图片足够的大了也是一样,不过没有关系,接下来就来为大家分享关于ps滚动条怎么设置和ps软件如何让显示下面的横向滚动条,现在图片足够的大了的一些

2024年9月1日 06:40

内存泄漏是指什么意思(什么是内存泄露内存泄露如何解决)

内存泄漏是指什么意思(什么是内存泄露内存泄露如何解决)

本文目录什么是内存泄露内存泄露如何解决什么是内存泄漏什么是内存泄露内存泄露该如何解决什么是内存泄漏 如何避免内存泄漏有哪些android中什么是内存泄漏内存溢出和内存泄漏分别是什么意思什么是内存泄露内存泄露如何解决1、内存泄漏指由于疏忽或错

2024年7月20日 09:10

网站底部美化代码(建设网站对于底部常用的一些处理方式有哪些)

网站底部美化代码(建设网站对于底部常用的一些处理方式有哪些)

其实网站底部美化代码的问题并不复杂,但是又很多的朋友都不太了解建设网站对于底部常用的一些处理方式有哪些,因此呢,今天小编就来为大家分享网站底部美化代码的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录建设网站对于底

2024年7月12日 19:55

美国总统大选2024(特朗普或涉嫌3宗罪,2024年参选总统彻底“凉”了)

美国总统大选2024(特朗普或涉嫌3宗罪,2024年参选总统彻底“凉”了)

其实美国总统大选2024的问题并不复杂,但是又很多的朋友都不太了解特朗普或涉嫌3宗罪,2024年参选总统彻底“凉”了,因此呢,今天小编就来为大家分享美国总统大选2024的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文

2024年8月12日 12:45

浮点型常量在计算机中是以什么方式存储(C语言 常量以什么形式存储的二进制原码还是补码)

浮点型常量在计算机中是以什么方式存储(C语言 常量以什么形式存储的二进制原码还是补码)

其实浮点型常量在计算机中是以什么方式存储的问题并不复杂,但是又很多的朋友都不太了解C语言 常量以什么形式存储的二进制原码还是补码,因此呢,今天小编就来为大家分享浮点型常量在计算机中是以什么方式存储的一些知识,希望可以帮助到大家,下面我们一起

2024年7月3日 17:53

html修改密码页面代码(html中用css修改密码框用*号替代黑点 最好给出代码截图,十分感谢)

html修改密码页面代码(html中用css修改密码框用*号替代黑点 最好给出代码截图,十分感谢)

本文目录html中用css修改密码框用*号替代黑点 最好给出代码截图,十分感谢在HTML5中,这段代码如何修改、增加代码,才能在用户名和密码不一致时弹出“登录不成功”求大神指导给网页设置个密码的代码是多少Thinkphp3.1.3修改密码求

2024年6月28日 17:44

selected for(select sb for sth)

selected for(select sb for sth)

本文目录select sb for sthNo valid items selected for the current operation, exiting.you have been selected for a app怎么解决ICEM

2024年6月26日 03:19

部署图显示代码本身的结构(用图形画出一个web程序部署在tomcat的基本目录结构)

部署图显示代码本身的结构(用图形画出一个web程序部署在tomcat的基本目录结构)

本文目录用图形画出一个web程序部署在tomcat的基本目录结构统一建模语言UML中用来反映代码的物理结构的是如何在gerrit 网站中 显示代码的目录结构组件图的创建用于显示运行的处理结点以及居于其上的构件、进程和对象的配置的图是 ( )

2024年3月15日 05:50

interface命令(华为交换机interface Ethernet1/0/1什么意思)

interface命令(华为交换机interface Ethernet1/0/1什么意思)

本文目录华为交换机interface Ethernet1/0/1什么意思interface range f0/1 - 24 这个命令如何解释请问:交换机命令 interface ethernet 0/1 是什么意思静态路由器配置时,命令in

2024年6月11日 16:53

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索