c语言求树上节点的双亲,用非递归算法求二叉树叶子结点的c语言代码怎样写?...

a0edbc1df1f7c41d149062b0eb44c120.png

递归算法:是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

递归算法的特点

递归过程一般通过函数或子过程来实现。

递归算法:在函数或子过程的内部,直接或者间接地调用自己的算法。

递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。

递归算法解决问题的特点:

(1) 递归就是在过程或函数里调用自身。

(2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。

(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。

(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

递归算法所体现的“重复”一般有三个要求:

一是每次调用在规模上都有所缩小(通常是减半);

二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);

三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。

例子如下:

描述:把一个整数按n(2<=n<=20)进制表示出来,并保存在给定字符串中。比如121用二进制表示得到结果为:“1111001”。

参数说明:s: 保存转换后得到的结果。

n: 待转换的整数。

b: n进制(2<=n<=20)

void

numbconv(char *s, int n, int b)

{

int len;

if(n == 0) {

strcpy(s, "");

return;

}

/* figure out first n-1 digits */

numbconv(s, n/b, b);

/* add last digit */

len = strlen(s);

s[len] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n%b];

s[len+1] = '\0';

}

void

main(void)

{

char s[20];

int i, base;

FILE *fin, *fout;

fin = fopen("palsquare.in", "r");

fout = fopen("palsquare.out", "w");

assert(fin != NULL && fout != NULL);

fscanf(fin, "%d", &base);

/*PLS set START and END*/

for(i=START; i <= END; i++) {

numbconv(s, i*i, base);

fprintf(fout, "%s\n", s);

}

exit(0);

}

递归算法简析(PASCAL语言)

递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写

程序能是程序变得简洁和清晰.

一 递归的概念

1.概念

一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).

如:

procedure a;

begin

.

.

.

a;

.

.

.

end;

这种方式是直接调用.

又如:

procedure b; procedure c;

begin begin

. .

. .

. .

c; b;

. .

. .

. .

end; end;

这种方式是间接调用.

例1计算n!可用递归公式如下:

1 当 n=0 时

fac(n)={n*fac(n-1) 当n>0时

可编写程序如下:

program fac2;

var

n:integer;

function fac(n:integer):real;

begin

if n=0 then fac:=1 else fac:=n*fac(n-1)

end;

begin

write('n=');readln(n);

writeln('fac(',n,')=',fac(n):6:0);

end.

例2 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序计算共有多少种不同的走法.

设n阶台阶的走法数为f(n)

显然有

1 n=1

f(n)={

f(n-1)+f(n-2) n>2

可编程序如下:

program louti;

var n:integer;

function f(x:integer):integer;

begin

if x=1 then f:=1 else

if x=2 then f:=2 else f:=f(x-1)+f(x-2);

end;

begin

write('n=');read(n);

writeln('f(',n,')=',f(n))

end.

二,如何设计递归算法

1.确定递归公式

2.确定边界(终了)条件

三,典型例题

例3 梵塔问题

如图:已知有三根针分别用1,2,3表示,在一号针中从小放n个盘子,现要求把所有的盘子

从1针全部移到3针,移动规则是:使用2针作为过度针,每次只移动一块盘子,且每根针上

不能出现大盘压小盘.找出移动次数最小的方案.

程序如下:

program fanta;

var

n:integer;

procedure move(n,a,b,c:integer);

begin

if n=1 then writeln(a,'--->',c)

else begin

move(n-1,a,c,b);

writeln(a,'--->',c);

move(n-1,b,a,c);

end;

end;

begin

write('Enter n=');

read(n);

move(n,1,2,3);

end.

例4 快速排序

快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束.

程序如下:

program kspv;

const n=7;

type

arr=array[1..n] of integer;

var

a:arr;

i:integer;

procedure quicksort(var b:arr; s,t:integer);

var i,j,x,t1:integer;

begin

i:=s;j:=t;x:=b;

repeat

while (b[j]>=x) and (j>i) do j:=j-1;

if j>i then begin t1:=b; b:=b[j];b[j]:=t1;end;

while (b<=x) and (i

if i

until i=j;

b:=x;

i:=i+1;j:=j-1;

if s

if i

end;

begin

write('input data:');

for i:=1 to n do read(a);

writeln;

quicksort(a,1,n);

write('output data:');

for i:=1 to n do write(a:6);

writeln;

end.

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

质数之和c语言编程,C程序检查一个数字是否可以表示为两个质数之和

C程序检查一个数字是否可以表示为两个质数之和在此示例中&#xff0c;您将学习检查用户输入的整数是否可以表示为所有可能组合的两个质数之和。要理解此示例&#xff0c;您应该了解以下C语言编程主题&#xff1a;为了完成此任务&#xff0c;我们将创建一个名为checkPrime()的函…

第二次冲刺阶段 站立会议09

昨天做了什么&#xff1a;昨天把程序进行了整合 今天要做什么&#xff1a;今天我们的项目大体完成了&#xff0c;进行最后一次的测试 遇到的困难&#xff1a;整个项目整合在一起后&#xff0c;运行起来有点卡转载于:https://www.cnblogs.com/yuanyajiao/p/4575945.html

uoj #118. 【UR #8】赴京赶考 水题

#118. 【UR #8】赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description 高中&#xff0c;高中&#xff0c;短暂的三年。NOI是高中结业考试&#xff0c;而高考在每年暑假举行。高二暑假&#xff0c;这是你最后一次参加高考的机会。…

c语言求前15项中偶数项的和,偶数前n项和

初中数学相较于小学数学&#xff0c;在内容、难度等方面均有提高&#xff0c;因此在学生学习中&#xff0c;很多家长不知道怎样去辅导孩子学习数学&#xff0c;今天小编整理了偶数前n项和&#xff0c;仅供参考!1 等差数列的奇数项的前n项和和偶数的前n项和怎么求_百度知道1&am…

x什么意思c语言新闻app啊我et,C语言笔试题目

4、关键字const有什么含意&#xff1f;表示常量不可以修改的变量。5、关键字volatile有什么含意&#xff1f;并举出三个不同的例子&#xff1f;提示编译器对象的值可能在编译器未监测到的情况下改变。int (*s[10])(int) 表示的是什么啊int (*s[10])(int) 函数指针数组&#xff…

openGl

OpenGL 作为当前主流的图形API之一&#xff0c;它在一些场合具有比DirectX更优越的特性。 1、与C语言紧密结合。 2、强大的可移植性。 3、高性能的图形渲染。 OpenGL 官方网站&#xff08;英文&#xff09;http://www.opengl.org 第一步&#xff0c;选择一个编译环境 现在Wind…

在visual studio 2010+中调用ffmpeg编译时 报错error LNK xxxx: 模块对于 SAFESEH 映像是不安全的。...

解决该错误的方法: 1.右键单击该项目选择“属性”。 2.在属性页中选择&#xff1a;配置选项->链接器->命令行。 3. 在命令行的“其他选项”中输入/SAFESEH:NO。 4.点击确定&#xff0c;从新编译即可通过。 转载于:https://www.cnblogs.com/eachan/p/4582031.html

八皇后问题c语言循环,八皇后问题的12组解

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#define N 8 /*皇后数*/typedef int bool;rot(char d[ ],char s[ ]){ int i;for(i1; i<N; i)d[N-(s[i-1]-0)]i0; d[N] ;}zhuan(char d[ ],char s[ ]){ int i;for(i1; i<N; i)d[s[i-1]-0-1]i0; d[N] ;}bool O…

Java: String.split(....); 结果很意外

String txt "join|公共聊天室||"; String[] paras txt.splite("\\|"); String t1 paras[0]; String t2 paras[1]; String t3 paras[2]; ........java.lang.ArrayIndexOutOfBoundsException: 2 at sm.service.Service.run(Service.java:125) 程序运行中…

linux野指针追踪,【华清远见】野指针和空指针的两个小点

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼作者&#xff1a;吕老师,华清远见嵌入式学院讲师。大家都知道指针的学习对于c语言学习来说可谓是至关重要的&#xff0c;下面我们来说一下在指针中两种比较特殊的关于指针的概念&#xff0c;野指针和空指针。首先说一下空指针。voi…

HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用?

http://blog.hexu.org/archives/1944.shtml?utm_sourcetuicool转载于:https://www.cnblogs.com/fuqiang88/p/4584908.html

av linux,AV Linux 新版发布,多少人知道

原标题&#xff1a;AV Linux 新版发布&#xff0c;多少人知道正文Glen MacArthur宣布发布了全新版本的AV Linux&#xff0c;这是一个基于Debian的面向多媒体的发行版&#xff0c;其中包含一系列音频和视频制作软件。对于那些不了解此发行版的人&#xff0c;你应该知道它包含用于…

C#中拷贝指定文件夹下的所有文件夹目录到指定文件夹中的方法

原文地址&#xff1a;http://www.biye5u.com/article/Csharp/fileprog/2011/4198.html 本文给出了一个在C#中拷贝指定文件夹下的所有文件夹目录到指定文件夹中的方法。public static void CopyFolder(string strFromPath,string strToPath){ //如果源文件夹不存在&#x…

android应用对于内存的大小是有限制的,Android 的内存限制

2、单个应用可用的最大内存Android设备出厂以后&#xff0c;java虚拟机对单个应用的最大内存分配就确定下来了&#xff0c;超出这个值就会OOM。这个属性值是定义在/system/build.prop文件中的dalvik.vm.heapstartsize8m它表示堆分配的初始大小&#xff0c;它会影响到整个系统对…

winfrom 从网页中通过源代码截取文章

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO;//引用流 using System.Net; using System.Text.RegularExpr…

android 判断webview加载成功,Android:如何检查使用webview.loadUrl时url的成功加载

不幸的是&#xff0c;目前在WebView中没有简单的方法来确保页面上的所有内容都已成功加载。我们希望在未来的版本中提供更好的API。让我解释一下你现在可以做什么。首先&#xff0c;为了检测阻止WebView连接服务器加载主页面的任何问题(例如&#xff0c;域名错误&#xff0c;I/…

ZK tree使用mold

前台Tree.zul <?page title"Tree使用" contentType"text/html;charsetUTF-8"?> <zk xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://www.zkoss.org/2005/zul" xsi:schemaLocation"http://www.zk…

和平精英android怎么写符号,和平精英名字符号大全 可用的名字特殊符号有哪些...

和平精英名字符号大全&#xff1b;和平精英玩家名可以使用特殊符号使自己的名字与众不同&#xff0c;有哪些特殊符号是可用的呢&#xff1f;下面一起来看看吧。和平精英名字特殊符号大全π-/≤≥≈<>≈≡<>∷∫∮∝∞∧∨⊥‖∠⌒⊙√∟⊿㏒㏑′〃〒&#xffe0;%℃…

Leetcode 142 Linked List Cycle II

Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Follow up:Can you solve it without using extra space? 同Leetcode 141 Linked List Cycle 性质&#xff1a;distance from head to 环开始点 &#xff1d;&#xff1d; …

android studio课程管理系统,8 个最优秀的 Android Studio 插件

3. Android Drawable Importer为了适应所有Android屏幕的大小和密度&#xff0c;每个Android项目都会包含drawable文件夹。任何具备Android开发经验的开发人员都知道&#xff0c;为了支持所有的屏幕尺寸&#xff0c;你必须给每个屏幕类型导入不同的画板。Android Drawable Imp…