1用递归实现二叉树的先序、中序、后序三种遍历。2哈夫曼树问题

还有真爱么2022-10-04 11:39:541条回答

1用递归实现二叉树的先序、中序、后序三种遍历。2哈夫曼树问题
1通过调试为下面的二叉树建立二叉链表,并用递归实现二叉树的先序、中序、后序三种遍历。
2[基本要求]:
A:从终端读入字符集大小为n,及n个字符和n个权值,建立哈夫曼树,进行编码并且输出。并将它存于文件hfmtree中。
B:利用已建好的哈夫曼编码文件hfmtree,对键盘输入的正文进行译码。输出字符正文,再输出该文的二进制码。
[测试数据] 用下表中给出的字符集和频度的实际统计数据建立哈夫曼树:
字符 A B C D E F G H I J K L M N
频度 64 13 22 32 103 21 15 47 57 1 5 32 20 57
字符 O P Q R S T U V W X Y Z 空格
频度 63 15 1 48 51 80 23 8 18 1 16 1 168
并实现以下报文的译码和输出:“THIS PROGRAM IS MY FAVORITE”。

已提交,审核后显示!提交回复

共1条回复
风之捷 共回答了16个问题 | 采纳率87.5%
//在吗? 我给你。另外我有自己的实验报告。
//里面有递归遍历,有迭代遍历。可以写文件,可以压缩编码。可以读文件。
//你不需要什么功能的话就删去相应的函数就行了。
//希望加分。
#include
#include
#include
#include
using namespace std;
const int maxlen = 10000; //结点最大数目
const int maxlen2 = 260; //字符最大数目,叶节点最大数目
const int maxchar = 260; //字符最大数目
#define INTMAX 10000000; //大数,大于任意一个权值
struct CharSet //程序初始化时保存字符和结点的结构体。
{
char ch;
int weight;
};
struct HaffNode //哈夫曼树结点结构
{
int weight,parent,lchild,rchild;
char ch;
HaffNode() {weight=0; parent=lchild=rchild=-1; ch='n';}
};
struct HaffCode //哈夫曼树字符编码信息结构
{
unsigned int bit; //通过位运算,用一个无符号整形来表示一串二进制编码。
int startb; //记录偏移量。
int weight;
char ch;
HaffCode() { bit=0; startb = -1; weight=0; ch='n';}
HaffCode& operator=(HaffCode & obj) //重载赋值符号
{
bit=obj.bit; startb=obj.startb;
ch=obj.ch; weight=obj.weight;
return *this;
}
};
class HaffmanSystem
{
private:
CharSet cs[maxlen/2]; //保存初始化时的字符和权值信息。
HaffNode hn[maxlen]; //保存哈夫曼树结点信息。
HaffCode hc[maxlen/2]; //保存哈夫曼树字符编码信息。
HaffCode hc2[maxchar]; //索引散列。考虑到字符数少,以字符的十进制数作为下标保存和索引字符编码信息,时间为O(1);
int head; //根结点的数组下标。
int n;
int leafnum; //叶节点个数,字符个数。
public:
HaffmanSystem() {n=head=leafnum=0;}
void Haffman(); //哈夫曼树生成函数。
void InitisLization(); //初始化,调用Haffman();
void Encoding(); //对文件"ToBeTran"进行编码。
void Decoding(); //对文件"CodeFile"译码。
void Print(); //印代码至屏幕。
static void TreePrinting(int pos,int i,int child_flag,HaffmanSystem * p,ofstream & fop);
void TreePrinting(); //输出哈夫曼树图形到屏幕和文件,其中要调用静态实例函数完成递归功能。
void TreeFromFile(); //从文件中获取哈夫曼树。
};
void HaffmanSystem::InitisLization()
{
cout
1年前

相关推荐

"递归图"用英文怎么说?
love凡一1年前3
微风吹过111 共回答了23个问题 | 采纳率91.3%
Recursion chart
数据结构求答案 3 判断题第26题 (2) 分 消除递归不一定需要使用栈。 正确 错误 第27题 (2) 分 在开散列表
数据结构求答案 3 判断题
第26题 (2) 分
消除递归不一定需要使用栈。

正确
错误



第27题 (2) 分
在开散列表中不会出现堆积现象。

正确
错误



第28题 (2) 分
在链栈上进行进栈操作时,不需判断栈满。

正确
错误



第29题 (2) 分
算法的正确性,一般不进行形式化的证明,而是用测试来验证。

正确
错误



第30题 (2) 分
顺序表不需存放指针,链表要存放指针,故链表的存储空间要求总是比顺序表大。

正确
错误



第31题 (2) 分
如果n个顶点的无向图有n条边,则图中肯定有回路。

正确
错误



第32题 (2) 分
图G的生成树T是G的子图。

正确
错误



第33题 (2) 分
数组的基本运算有读、写、插入、删除等。

正确
错误



第34题 (2) 分
不管树的深度和形态如何,也不可能构造出一棵有100个结点的哈夫曼树。

正确
错误



第35题 (2) 分
如果根结点的左子树和右子树高度差不超过1,则该二叉树是平衡二叉树。

正确
错误



第36题 (2) 分
排序的目的是为了方便以后的查找。

正确
错误



第37题 (2) 分
以中序方式遍历一个堆,则得到一个有序序列。

正确
错误



第38题 (2) 分
二叉树中可能所有结点的度都小于2。

正确
错误



第39题 (2) 分
顺序表可以按序号随机存取。

正确
错误
第40题 (2) 分
在二叉排序树中,即使删除一个结点后马上再插入该结点,该二叉排序树的形态也可能不同。

正确
错误



第41题 (2) 分
队列在使用中必须设置两个指针,分别指向真正的队头和队尾的位置。

正确
错误



第42题 (2) 分
数据的逻辑结构和运算集组成问题的数学模型,与计算机无关。

正确
错误



第43题 (2) 分
对称矩阵压缩存储后仍然可以随机存取。

正确
错误



第44题 (2) 分
有向图中顶点i的出度等于邻接矩阵中第i行中1的个数;入度等于第i列中1的个数。

正确
错误



第45题 (2) 分
树和森林都可转化为二叉树,故对给定的二叉树,不能区分是由树还是森林转换来的。

正确
错误



第46题 (2) 分
循环队列中入队和出队的节点位置可出现在数组的任一端,已不满足“一端进另一端出”的要求,故实际上已不是队列了。

正确
错误



第47题 (2) 分
顺序查找法不仅可用于顺序表上的查找,也可用于链表上的查找。

正确
错误



第48题 (2) 分
有向图中边数等于邻接矩阵中1的个数;也等于邻接表中的边表结点数。

正确
错误



第49题 (2) 分
直接插入排序是稳定的,而Shell排序就是调用若干趟直接插入排序,故也是稳定的。

正确
错误



第50题 (2) 分
基数排序不需进行关键字间的比较,故执行时间比基于比较的排序方法要快。

正确
错误
不会水的鱼5551年前1
zouyong 共回答了19个问题 | 采纳率94.7%
1对2对3对4对5错6对7对错8对9错10错11错12对13对14对15错16对17对18错19错20错21对22对23错24错
已知n为大于等于零的整数,试写出技术下列递归函数f(n)的递归和非递归算法
已知n为大于等于零的整数,试写出技术下列递归函数f(n)的递归和非递归算法
n+1 (n=0)
f(n)=
n*f(n/2) (n0)
tt真言1年前1
爱上芒果的猫 共回答了14个问题 | 采纳率71.4%
#include
//递归:
int f1(int n)
{
if(n==0)
return 1;
return n*f1(n/2);
}
//非递归:
int f2(int n)
{
int sum=1;
while(n!=0)
{
sum*=n;
n/=2;
}
return sum;
}
int main()
{
int sum;
while(scanf("%d",&sum)!=EOF)
{
if(sum
一个人第一个星期工资是400,以后每一个的工资都加10%,那我知道400(1+10%)^n,请问它的递归方程是怎样的?
一个人第一个星期工资是400,以后每一个的工资都加10%,那我知道400(1+10%)^n,请问它的递归方程是怎样的?
但是如果第一个月x大于等于1也算的话,不用这个啊,一楼。
挂树懒猫1年前1
沁狐梦 共回答了21个问题 | 采纳率90.5%
X(0)=400,
X(n)=X(n-1)*(1+10%).
btw:还有这好事,工资涨的够快,没几个月就上万了.
斐波纳契(Fibonacci)数列的第一项是1,第二项是1,以后各项都是前两项之和,使用递归
lelebule1年前3
╀最悠悠鋆╁ 共回答了27个问题 | 采纳率96.3%
a(n)=a(n-1)+a(n-2)
在C#环境下(1-2+3-4+5-6+7-8+9)用递归方法怎么写
草草离人语1年前1
我是丫 共回答了20个问题 | 采纳率95%
int digui(int i)
{
digui(i)= (-1)^(i+1) *digui(i-1)+i;
digui(0)=0;
}
新手 请指教
用C语言做到题编写程序,用递归的方法求1+2+3+…+n,可设递归函数为fun ()。(1)递归结束条件为n=0;(2)
用C语言做到题
编写程序,用递归的方法求1+2+3+…+n,可设递归函数为fun ()。
(1)递归结束条件为n=0;
(2)递推公式为n+fun (n-1)。
用C语言编程序
bomfunk1年前1
mrqiu 共回答了22个问题 | 采纳率90.9%
#include
int fun(int n){if(n==0){return 0;}else{return n+fun(n-1);}}

void main(){int n;long sum=0;scanf("%d",&n);sum=fun(n);printf("%ldn",sum);}
行列式问题在用递归方法或者数学归纳法证明时,记n阶行列式为的为Dn,那么请问D(n-1)是怎么得到的?
行列式问题在用递归方法或者数学归纳法证明时,记n阶行列式为的为Dn,那么请问D(n-1)是怎么得到的?
我看有的题是去掉第一列最后一行(比如证明范德蒙时),有的是去掉最后一列最后一行.搞晕了.
青岛591年前1
寒露1008 共回答了15个问题 | 采纳率100%
只要去掉都可以这么称呼,但是具体去掉哪个就要看如何使新矩阵和旧矩阵间出现明显的关系
递归的作用是什么?谁能给我一个例子和说明啊?
泰兰德风语1年前1
有言言 共回答了15个问题 | 采纳率86.7%
递归就是“自己调用自己”.递归方法实际上体现了“依此类推”、“用同样的步骤重复”的思想,它可以用简单的程序来解决某些复杂的计算问题. 例:计算n! long fac(int n) { long i; if(n
用递归的方法编写一个返回长整型的函数,以计算斐波纳契数列的前20项。
abc30001年前1
ii87号 共回答了22个问题 | 采纳率86.4%
#include

long int FB(long int n)
{
long int m;
if (n == 1)
{
return 0;
}
else if (n == 2)
{
return 1;
}
else
{
m = FB(n - 1) + FB(n - 2);
}

return m;
}

int main()
{
long int sum =FB(20);
printf("%ld",sum);
system("pause");
return 0;
}第几项可以自己调整
pascal 递归的方法做问题1、用递归的方法求1+2+3+……+N的值。2、用递归函数输出斐波那契数列第n项。0,1,
pascal 递归的方法做问题
1、用递归的方法求1+2+3+……+N的值。
2、用递归函数输出斐波那契数列第n项。0,1,1,2,3,5,8,13……
3、输入一个非负整数,递归方法输出这个数的倒序数。例如输入123,输出321。
4、用递归算法将数组A中的N个数倒序输出。
5、用递归方法求N个数中的最大数及其位置。
6、用递归算法将一个十进制数X转换成任意进制数M(M<=16)。
其中第3个 第6个 较为重要 其他可以省略……
小雨浩1年前1
逆风的小丑 共回答了18个问题 | 采纳率100%
我直接写出最重要的把,只写子程序好了。
3:
procedure f(x,s:longint);
begin
if x=0 then begin writeln(s);exit;end;
f(x div 10,s*10+x mod 10);
end;
主程序中: f(x,0);(x是要颠倒的数);
6:
procedure f(x,s,t:longint);
begin
if t=0 then begin writeln(s);exit;end;(我直接用颠倒数字,为了防止最后的零不输出,我就设定了位数)
f(x div 10,s*10+x mod 10,t-1);
end;
procedure f1(x,s:longint);
var
t:longint;
begin
if x=0 then begin f(s,0,t);end;
t:=t+1;
f(x div m,s*10+(x mod m));
end;
主程序中:readln(m);(进制);f1(x,0);(x是要换进制的数);
如果用数组的话可以更好一点,我这样直接
请问离散数学中的递推关系是否即数据结构中的递归关系?
紫萝鸢尾1年前1
部分的风格1 共回答了21个问题 | 采纳率100%
是的
java 用递归和非递归方法计算F i b o n a c c i数列:1、1、2、3、4、8…
java 用递归和非递归方法计算F i b o n a c c i数列:1、1、2、3、4、8…
java 用递归和非递归方法计算F i b o n a c c i数列:1、1、2、3、4、8……F1=1 F2=1 Fn=Fn-1+Fn-2;n>2计算1/2+2/3+3/5+5/8结果为不是整数而是几分之几求程序
cf878151年前1
wujunchu 共回答了18个问题 | 采纳率88.9%
递归~~
public class Test { public static void main(String[] args){ System.out.println(f(6)); } public static int f(int n){ if(n == 1 || n == 2){ return 1; } return f(n-1)+f(n-2); }} 非递归
public class Test { public static void main(String[] args){ System.out.println(f(6)); } public static int f(int n){ if(n == 1 || n == 2){ return 1; } int n_1 = 1; int n_2 = 1; int fn = 0; for(int i = 2; i < n; i++){ fn = n_1+n_2; n_2 = n_1; n_1 = fn; } return fn; }} 还有楼主第5个数应该是5不是4~
C语言:采用递归调用函数方法计算Fibonacci数列的前20项
badblueboy1年前1
烟醉无味 共回答了25个问题 | 采纳率80%
#include
#define N 20
main(){
int f(int n);
int i;
for(i=1;i
从分治法的一般设计模式可以看出,用它设计的程序一般是 A、顺序 B、选择 C、循环 D、递归
diejian1年前1
shiye911 共回答了17个问题 | 采纳率76.5%
D、递归
简单的说,分治法就是把一个大问题分成两小问题;然后用同样的算法分别套用到这两个小问题上,知道问题被分解到一个极限,成为1个极简单的原子问题,从而可以简单的求解。
如何解这个递归方程f(n)=2f(n-1)+nf(0)=0前面有个大括号把两个式子括在一起了,类似这个“{”请问能不能再
如何解这个递归方程
f(n)=2f(n-1)+n
f(0)=0
前面有个大括号把两个式子括在一起了,类似这个“{”
请问能不能再给一点中间过程,呵呵。
yinyin01_01年前1
异读_ 共回答了17个问题 | 采纳率88.2%
f(n)=2^n*f(0)+2^(n-1)*1+2*(n-2)*2+……+2^1*(n-1)+2^0*n;
f(n)=2^n+2^(n-1)+……+2^2+2-n=2^(n+1)-n-2;
10-2 求数列的第N项(递归)
10-2 求数列的第N项(递归)
已知整数数列第一项和第二项是1,该数列从第三项开始,如果该项是奇数项,则它是前两项之和,如果该项是偶数项,则它是前两项之差,即:
f( n ) = 1 当 n = 1 或 2 时,
f( n ) = f( n-1 ) - f( n-2 ) 当n是偶数时,
f( n ) = f( n-1 ) + f( n-2 ) 当n是奇数时,
编写一个递归函数,求数列的第N项.
wxp861161年前1
jzw2008 共回答了15个问题 | 采纳率86.7%
我会
#include
int func(int n)
{
x09if (n == 1 || n == 2)
x09{
x09x09return 1;
x09}
x09else if(n % 2 == 0)
x09{
x09x09return func(n-1) - func(n - 2);
x09}
x09else if(n % 2 == 1)
x09{
x09x09return func(n-1) + func(n - 2);x09x09
x09}
x09return 0;
}
int main(int argc, char* argv[])
{
x09for (int i = 1; i < 10; i++)
x09{
x09x09printf("%d ", func(i));
x09}
x09printf("n");
x09
x09return 0;
}
【递归】数的计数我们要求找出具有下列性质数的个数(包含输入的自然数n):先输入一个自然数n(n≤1000),然后对此自然
【递归】数的计数
我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n≤1000),
然后对此自然数按照如下方法进行处理:
1.不作任何处理;
2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3.加上数后,继续按此规则进行处理,直到不能再加自
风舞残荷1年前1
tp风中过客 共回答了18个问题 | 采纳率88.9%
var ans,n:longint;
procedure search(m:longint);
var i:longint;
begin
inc(ans);
for i:=1 to m div 2 do
search(i);
end;
begin
readln(n);
search(n);
writeln(ans);
end.
python 用递归寻找list中第二大的数字
python 用递归寻找list中第二大的数字
如题
second smallest: Return the second smallest number in a given list
These functions seem pretty trivial, and they are. But the trick here is that you need to implement all of
them recursively. You should also try to be efficient. In particular, no function should ever need to access
any element of the list more than once. (i.e, don’t go through the entire list once to find the max, and again
to find the min).
不能用到内置函数 只能用递归来做
搞了一晚上了想不出怎么做 多谢帮助!
罗昌平1年前3
月亮上的桂花树 共回答了24个问题 | 采纳率87.5%
def second_smallest(elements, i):
if (i==1):
if elements[1]
通过对函数的递归调用,计算12+22+32+……+(n-1)2+n2,要求写出函数和主函数.long类型
生命的哲学1年前1
月光格格 共回答了21个问题 | 采纳率90.5%
在函数体内应该只有一个return对应函数调用的位置,而且reutrn语句后面那()里{ if(n==1) return (1); else return fact(n-1)*n; //计算n-1,EcmqgS
C语言用递归做一道题目自然数的拆分问题.给定自然数n,将其拆分成若干自然数的和.输出所有解,每组解中数字按从小到大排列.
C语言用递归做一道题目
自然数的拆分问题.给定自然数n,将其拆分成若干自然数的和.输出所有解,每组解中数字按从小到大排列.相同数字的不同排列算一组解.如:
3=1+1+1
3=1+2
3=3
火人1年前1
Agatha0807 共回答了24个问题 | 采纳率100%
#include
int ans[1000];
void dfs(int l,int n,int last,int sum)
{
if(sum==n)
x09{
printf("%d=",n);
x09x09for (int i=0;i
java中递归的应用!f(20)=1,f(21)=4,f(n+2)=2*f(n+1)+f(n); 其中,n是大于零的整数
java中递归的应用!f(20)=1,f(21)=4,f(n+2)=2*f(n+1)+f(n); 其中,n是大于零的整数,求f(10)的值.
如何利用java的递归算法求出f(10),在已知的函数值n=21,20是怎么定义?
f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n);其中,n是大于零的整数,求f(10)的值.

这个程序如何修改?
美格馨1年前1
我爱鑫zhu 共回答了14个问题 | 采纳率85.7%
public class Test {
x05public static int f(int n){
x05x05if(n==20){
x05x05x05return 1;
x05x05}else if(n==21){
x05x05x05return 4;
x05x05}else if(n<20){
x05x05x05return f(n+2)-2*f(n+1);
x05x05}else{
x05x05x05return 2*f(n-1)+f(n-2);
x05x05}
x05}
x05
x05public static void main(String[] args) {x05x05
x05x05System.out.println(f(10));//求出f(10)的值
x05}
}
已经通过测试,在main函数中输入f(n),其中n为自己手动调整,就能求出值
(c++求助)要求用递归实现级数求和“一分之一 + 二分之一 + 三分之一 + 四分之一 +.......n分之一”。
(c++求助)要求用递归实现级数求和“一分之一 + 二分之一 + 三分之一 + 四分之一 +.......n分之一”。 题目还要求是先定义一个求它的函数,在调用到主函数中去。也就是函数调用吧
吟游名华1年前1
早熟的孩子 共回答了22个问题 | 采纳率81.8%
#include
#include

double fun(int n)
{
if (n < 0)
{
return 0;
}
if (n == 1)
{
return 1;
}
else
{
return fun(n-1) + (double)1/n;
}
}

int main()
{
int k;
scanf("%d",&k);

printf("%lf",fun(k));

system("pause");
}
Mathematica 按年龄分组的种群增长模型,我输入完递归方程后,结果出来是这个.是哪里打错了嘛?对了,初始条件应该
Mathematica
按年龄分组的种群增长模型,我输入完递归方程后,结果出来是这个.是哪里打错了嘛?
对了,初始条件应该是x[0],不是x[1]
风儿恋沙1年前1
海气云天 共回答了10个问题 | 采纳率90%
首先,Mathematica并不支持非显式的矩阵定义,所以你的x[k]要改写成显式的{x[k], y[k], z[k]},顺便你的第一行根本没有起到作用,这行东西没法申明x[k]是个3×1的矩阵;然后,矩阵的内积应该用“ . ”,最后,至少到版本8为止,RSolve还不支持这种矩阵式的方程写法,所以需要使用Thread把它变成一般形式的代数方程,总之:RSolve[{Thread[{x[1 + k], y[1 + k], z[1 + k]} == {{1, 4, 3}, {1/2, 0, 0}, {0, 1/4, 0}}.{x[k], y[k], z[k]}], {x[1], y[1], z[1]} == {1000, 1000, 1000}}, {x[k], y[k], z[k]}, k]一分钟左右就能算出来了,结果很长,这里就不贴了.
楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,用C++或lua语言编一程序计算共有多少种不同的走法.分别用递归、
楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,用C++或lua语言编一程序计算共有多少种不同的走法.分别用递归、迭代二种方式, 写出详细的代码
最后的蚂蚁1年前1
p5450741 共回答了15个问题 | 采纳率93.3%
int recursive(int n)
{
if (n <= 2)
return n;
return recursive(n - 1) + 2 * recursive(n - 2);
}


int iterative(int n)
{
int f1 = 1, f2 = 2, f;
for (int i = 3; i <= n; ++i)
{
f = f2 + 2 * f1;
f1 = f2;
f2 = f;
}
return f;
}
使用递归编写函数,求f(n)当n = 0时,f(n) = 0;当n = 1时,f(n) = 1;当n >= 2时,f(n
使用递归编写函数,求f(n)
当n = 0时,f(n) = 0;当n = 1时,f(n) = 1;当n >= 2时,f(n) = 2f(n - 1) + 3f(n - 2):
我只想要题解,只是很想知道这个题目的规律
chenxing3211年前1
hz王vv强 共回答了18个问题 | 采纳率77.8%
int f(int n)
{
if (n == 0 || n == 1)
return n;
else
return 2 * f(n - 1) + 3 * f(n - 2);
}
数学解法如下:
递推方程的特征方程为:
x^2=2x+3,解得特征根为x1=-1,x2=3,
从而f(n)=C1*(-1)^n + C2*3^n,再代入f(0)=1,f(1)=1,解得
C1=-1/4, C2=1/4,从而f(n)=-1/4*(-1)^n + 1/4 * 3^n
这个是离散数学的知识
由这种类型的递归公式数列通项:A(n+1)=(An)²+aAn+b 假设知道A1,A2之类的.
由这种类型的递归公式数列通项:A(n+1)=(An)²+aAn+b 假设知道A1,A2之类的.
楼下是想用不动点来解吧?如A(n+1)=-An^2+2An,如何这样解出?令x=-X^2+2x,得x1=0,X2=1。A(n+1)/(An-1),右边就变成-(An-1)+1/(An-1)
抑或:(An+1-X1)/(An-X2)=An-X1 ;(An-X1)/(An-1-X2)=An-1-X1 ^……以此类推,最后逐项右边带入左边得:An+X1= (A1+X1)(A1+X2)……(An-1+X2)然后呢?怎么解下去?
望高手不吝赐教。
邱禹清1年前2
给碗水喝 共回答了15个问题 | 采纳率93.3%
应该会用递推法哦,不然告诉你A1 A2 就没啥意思.除非你这个题是有3问.要是你再告诉A1 A2 的具体数那可能会容易点哦.这仅是我个人观点也不知道对不对哦.嘿嘿
如果A(n+1)=-An^2+2An,则[A(n+1)-1]=-[An-1]^2
∴A2-1=-[A1-1]^2,A3-1=-[A2-1]^2=-[A1-1]^4.
记Bn=An-1,∴B2=-B1^2,B3=-B1^4,B4=-B1^8依次类推Bn=-B1^2^(n-1)∴An=-(A1-1)^2^(n-1)+1
编译原理中的“程序的结构通常是由递归规则表示的”是什么意思
编译原理中的“程序的结构通常是由递归规则表示的”是什么意思
原句是:
程序的结构通常是由递归规则表示的,例如,我们可以用下面的规则来定义表达式:
(1)任何标识符是表达式.
(2)任何常数(整常数、实常数)是表达式.
(3)若表达式1和表达式2都是表达式,那么:
表达式1+表达式2 表达式1* 表达式2
(表达式1)
都是表达式
不太懂什么是递归表示
是不是说一个表达式和另一个表达式在一起还是一个表达式嗯呢?
可是这样只符合(3)啊,(1)和(2)又说明了什么呢?
vvfirst1年前1
日子一天天的过 共回答了26个问题 | 采纳率100%
递归都要包含两个内容,第一是初值或者初始条件的选择,第二才是递归关系的表达,也就是递推表达式.如果(1)和(2)没有,递归定义是不完整的.
你肯定学过fibonacci数列以及用递归程序编写fibonacci数列,还有阶乘的例子.如果不定义当n=1时,函数返回值是多少,那么函数递归会进入死循环.这里定义n=1的返回值,和上述的(1)和(2)是一个道理.
求这题目递归方程.一个人第一个星期工资是400,以后每一个的工资都加10%,那我知道400(1+10%)^n,请问它的递
求这题目递归方程.
一个人第一个星期工资是400,以后每一个的工资都加10%,那我知道400(1+10%)^n,请问它的递归方程是怎样的?
第一个月也算的话呢?
cqrztj301年前1
waln 共回答了24个问题 | 采纳率87.5%
第n个星期的工资=W(n)

W(n)=(1+10%)*W(n-1)
W(1)=400
递归肯定得有一个结束的位置
W(n)=(1+10%)*W(n-1)
这是递推方程
W(1)=400
这是结束条件
究竟时间是星期还是月
第一个星期工资是400,以后每一个的工资?
数据结构树和二叉树的实际应用不是什么题目,我要就是树二叉树实际应用举例,比如讲递归的实际应用举例是汉诺塔,类似这个.或者
数据结构树和二叉树的实际应用
不是什么题目,我要就是树二叉树实际应用举例,比如讲递归的实际应用举例是汉诺塔,类似这个.
或者换句话说,我要一道题目要用到树和二叉树的,但是又不是抽象的,比如举个例子:下面有两道线性结构的题目:
(1)读入10个整数存入数组a,求数组a中最大的数及位置
(2)小明有10个朋友,小明想知道他们中间谁拥有的玩具数量最多
读入小明10个朋友各有的玩具数目,输出拥有最多玩具数量的人的拥有的玩具数目,及那个小朋友的编号.
我要的是第二题的类型.
学了树和二叉树,最迷糊的是应用在哪里,
为我的分数不被百度吞噬-.-,所以我没弄悬赏分,
lml19871年前1
mcgrandy 共回答了20个问题 | 采纳率95%
一个单位有10个部门,每个部门都有一部电话,但是整个单位只有一根外线,当有电话打过来的时候,由转接员转到内线电话,已知各部门使用外线电话的频率为(次/天)
5 20 10 12 8 4 3 5 6 9
问应该如何设计个内线电话号码,使得接线员拨号次数尽可能少?
这是哈夫曼树的应用
请使用递归的形式,写出一个名为 ’sumAcc‘ 的函数,它用一个累积的参数来使一个list的整数加起来求和.
请使用递归的形式,写出一个名为 ’sumAcc‘ 的函数,它用一个累积的参数来使一个list的整数加起来求和.
原题是:Write a function called 'sumAcc' in recursive style that uses an accumulating parameter to sum a list of integers.
fenghuangyuhuo1年前1
龙先生1 共回答了16个问题 | 采纳率93.8%
这题有没有像那个matches那样有个示例,这个accumulating parameter是类似foldl的那种累加初始数,还是直接就是对list里面的数做累加,无法判断
递归方程求解:已知T(1)=0,n=1时,t(n)=t(⌊n/2⌋)+t(⌈n/2&
递归方程求解:已知T(1)=0,n=1时,t(n)=t(⌊n/2⌋)+t(⌈n/2⌉)+n-1,n>1时
这种带向上取整和向下取整类型的题目怎么解?
雷鸣之夜1年前1
tanqiu2003 共回答了19个问题 | 采纳率78.9%
int f(int n)
{
int r;
if(!n) return 0;
if(n==1) return 1;
r=f(n/2);
if(n%2) r+=f(n/2+1);
else r*=2;
return r+n-1;
}
余弦N倍角递归证明有一步推倒看不懂
余弦N倍角递归证明有一步推倒看不懂

红框这一步是怎么推出来的? sin(k-1)α sinα=cos(k-1)α cosα-coskα,为什么?
zhangxinba1年前2
4A3B2C1D 共回答了20个问题 | 采纳率95%
这个第一步错了,应该是输入失误,应该是sin(k-1)αcosα
红框这步是根据两角和余弦:cos(α+β)=cosαcosβ-sinαsinβ
移下项就得到了,题中β=(k-1)α
求助一道c++背包问题 需要用递归的方法解决
求助一道c++背包问题 需要用递归的方法解决
已知背包可放入的质量为S,现有n件物品,质量分别为w1,w2,w3...wn,能否从这n件物品中选择若干件放入此背包,使之重量恰好为S,若存在一种符合要求的选择,则称背包问题有解,否则背包问题无解.
zzzzazzzz1年前1
坏男人28 共回答了16个问题 | 采纳率93.8%
1.排序,删掉大于S的物品.
2.编码,放入为1,不放入为0.一个编码100111…就是一种物品的选择.
3.从00000开始到11111,遍历一遍就OK了.
想用递归的话
1.排序,从小到大
2.从0000开始,如果总质量小于S,2进制序列加1,作为变量传送到下一层递归函数中
3.如果大于S,返回0
4.如果等于S,返回1以及当前的2进制序列
0,1,1,2,3,5,8,N;q请说出这组数据有什么规律?并且用递归方法求出第N位值
可控鬼1年前1
twq999 共回答了19个问题 | 采纳率94.7%
0,1,1,2,3,5,8,N;是f(n)=f(n-2)+f(n-1),斐波那契数列
用c语言
//使用递归计算斐波那契(Fibonacci)数列的第n项函数
int Fib(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
if(n>1)
return (Fib(n-1)+Fib(n-2));
return 0;
}
算法设计的基本方法里面的“递归”是什么意思
算法设计的基本方法里面的“递归”是什么意思
方便的话给举例说明一下行吧?谢了.
别处周郎1年前1
主演你 共回答了22个问题 | 采纳率90.9%
递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象.递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰..递归是一种重要的编程技术.该方法用于让一个函数从其内部调用其自身.一个示例就是计算阶乘.0 的阶乘被特别地定义为 1.更大数的阶乘是通过计算 1 * 2 * ...来求得的,每次增加 1,直至达到要计算其阶乘的那个数.下面的段落是用文字定义的计算阶乘的一个函数.“如果这个数小于零,则拒绝接收.如果不是一个整数,则将其向下舍入为相邻的整数.如果这个数为 0,则其阶乘为 1.如果这个数大于 0,则将其与相邻较小的数的阶乘相乘.”要计算任何大于 0 的数的阶乘,至少需要计算一个其他数的阶乘.用来实现这个功能的函数就是已经位于其中的函数;该函数在执行当前的这个数之前,必须调用它本身来计算相邻的较小数的阶乘.这就是一个递归示例.递归和迭代(循环)是密切相关的 — 能用递归处理的算法也都可以采用迭代,反之亦然.确定的算法通常可以用几种方法实现,您只需选择最自然贴切的方法,或者您觉得用起来最轻松的一种即可.显然,这样有可能会出现问题.可以很容易地创建一个递归函数,但该函数不能得到一个确定的结果,并且不能达到一个终点.这样的递归将导致计算机执行一个“无限”循环.下面就是一个示例:在计算阶乘的文字描述中遗漏了第一条规则(对负数的处理) ,并试图计算任何负数的阶乘.这将导致失败,因为按顺序计算 -24 的阶乘时,首先不得不计算 -25 的阶乘;然而这样又不得不计算 -26 的阶乘;如此继续.很明显,这样永远也不会到达一个终止点.因此在设计递归函数时应特别仔细.如果怀疑其中存在着无限递归的可能,则可以让该函数记录它调用自身的次数.如果该函数调用自身的次数太多,即使您已决定了它应调用多少次,就自动退出.下面仍然是阶乘函数,这次是用 JScript 代码编写的.// 计算阶乘的函数.如果传递了// 无效的数值(例如小于零),// 将返回 -1,表明发生了错误.若数值有效,// 把数值转换为最相近的整数,并// 返回阶乘.function factorial(aNumber) {aNumber = Math.floor(aNumber); // 如果这个数不是一个整数,则向下舍入.if (aNumber < 0) { // 如果这个数小于 0,拒绝接收.return -1; } if (aNumber == 0) { // 如果为 0,则其阶乘为 1.return 1; } else return (aNumber * factorial(aNumber - 1)); // 否则,递归直至完成.}
线性递归数列 特征方程有重根时怎么解通项公式
海底小鱼Z1年前1
meiziying 共回答了18个问题 | 采纳率100%
如果λ是k重特征值,那么a_n中与λ相关的项是 λ^n * P(n),其中P(x)是一个k-1次多项式.
累加算法应用__________程序结构来实现.A) 循环结构 (B) 选择结构 (C) 累加结构 (D) 递归结构
静051年前1
jmzxgggg 共回答了19个问题 | 采纳率73.7%
A) 循环结构
java 选择题解答关于方法的递归算法,说法正确的是()A.递归就是方法自己调用自己B.递归的次数不能过大,否则会导致栈
java 选择题解答
关于方法的递归算法,说法正确的是()
A.递归就是方法自己调用自己
B.递归的次数不能过大,否则会导致栈内存溢出
C.使用递归算法,方法必须有返回值
D.构造方法不可以使用递归算法
pywjy1年前1
无望的等待 共回答了10个问题 | 采纳率90%
A 对
B 尾递归优化
C 不是必须的
D 构造方法递归调用自己?不能吧
消除下列文法G[S]的左递归,获得与其等价的、无左递归的文法G’[S].
消除下列文法G[S]的左递归,获得与其等价的、无左递归的文法G’[S].
G[S]:S→Qc︱c
Q→Rb︱b
R→Sa︱a
哭的样子帅1年前1
张松梅 共回答了17个问题 | 采纳率94.1%
S→Qc︱c (1)
Q→Rb︱b (2)
R→Sa︱a (3)
将第1个式子带入第3个式子,再将第2个式子也带入,得
R->Rbca|bca|ca|a 对其消除左递归,得
R->(bca|ca|a)R'
R'->bcaR'|ε
最终文法变为:
S->Qc|c
Q->Rb|b
R->(bca|ca|a)R'
R'->bcaR'|ε
数学递归疑惑有一组数1,1,2,3,5,8,13,21,34,请问如何可以看出它的函数原形为f(n)=f(n-1)+f(
数学递归疑惑
有一组数1,1,2,3,5,8,13,21,34,请问如何可以看出它的函数原形为f(n)=f(n-1)+f(n-2)
云火1年前3
hj234345 共回答了11个问题 | 采纳率90.9%
这是著名的斐波拉契数列
请问用mathematica可以解二元递归方程吗?
请问用mathematica可以解二元递归方程吗?
f(n,m)=a1f(n-1,m)+a2f(n+1,m)+a3f(n,m-1)+a4f(n,m+1)+[1-a1-a2-a3-a4]f(n,m)
其中已知f(0,0)=0,f(N,M)=1,n属于(0,N),m属于(0,M)
guominsheng151年前1
lichenghai1 共回答了15个问题 | 采纳率93.3%
二元递归方程是可以解的(帮助里可以查到相应的例子),但是你这个解不了.相应的语法是:RSolve[{f[n, m] == a1 f[n - 1, m] + a2 f[n + 1, m] + a3 f[n, m - 1] + a4 f[n, m + 1] + (1 - a1 - a2 - a3 - a4) f[n, m]}, f[n, m], {n, m}]原样返回了.也没什么意外的,递推方程找不到通式的情况并不少见.顺便如果你这个方程是由某个偏微分方程化过来的的话,建议你直接去解微分方程,可能解出来的可能性还大一些.
python问题:用二分法求根(递归)
python问题:用二分法求根(递归)
def root(x,p):
low = 0
hgh = x
m = (low + high)/2
if abs(m**2 - x) >> def f(m,x,low,high):
if abs(m**2 - x) x:
high = m
m = (low + high)/2
else:
low = m, m = (low + high)/2
return f(m,x,low,high)
>>> root(2.0,0.01)
Traceback (most recent call last):
File "", line 1, in
root(2.0,0.01)
File "", line 4, in root
m = (low + high)/2
NameError: global name 'high' is not defined,哪错了,谢谢
def f(m,x,low,high,p):
if abs(m**2 - x) x:
high = m
m = (low + high)/2
else:
low = m, m = (low + high)/2
return f(m,x,low,high,p)
>>> def root(x,p):
low = 0.0
high = x
m = (low + high)/2
if abs(m**2 - x) >> root(2.0,0.01)
Traceback (most recent call last):
File "", line 1, in
root(2.0,0.01)
File "", line 7, in root
else: return f(m,x,low,high,p)
File "", line 8, in f
low = m, m = (low + high)/2
TypeError: 'float' object is not iterable
李维斯gg1年前1
1314520888 共回答了14个问题 | 采纳率85.7%
拼写错误:
hgh = x
改成high = x
怎么用公式法求递归方程?如题,请给个齐次和非齐次的例子,
贪睡deM1年前1
清风拂面吹眯了眼 共回答了19个问题 | 采纳率89.5%
若数列H(n)的递推公式为:
H(n)-a1H(n-1)-a2H(n-2)-…-akH(n-k)=0,则一元k次方程xk-a1xk-1-a2xk-2-…-ak=0叫k阶
常系数递推公式的特征方程,其k个复数根叫特征根.由递推公式求通项公式要用.
数列H(n)的k个互不相同特征根为:q1,q2,…,qk,则k阶常系数递推公式的通解为:
H(n)= c1q1^n+ c2q2^n+…+ ckqk^n
其中的c1,c2,...,ck待定后就可得到一个特解.
(ckqk^n等于ck与qk的n次方的乘积)
已知某函数定义如下,写出它的递归求解算法(函数中a为浮点数,n为自然数)(1)p(n)=a 当n=1时
已知某函数定义如下,写出它的递归求解算法(函数中a为浮点数,n为自然数)(1)p(n)=a 当n=1时
第二个问 p(n+1)=a*p(n) 当n>1时.
还有2个填空
具有511个结点的满二叉树,其叶结点个数为( )
在n个顶点的有向完全图中,边的条数为( )
数组是通过( )进行索引
在散列函数H(k)=k%m中,一般来讲,m应取奇数还是偶数?
如果结点A 有3个兄弟,而且B是A双亲,则B的度( )
若要尽可能地完成对实数数组的排序,且要求排序是稳定的则应选
A归并 B 快速C 堆排序D 基数排序
sperm12341年前1
qpHqp 共回答了14个问题 | 采纳率85.7%
第一题:算法用C语言表示如下:
int p(int n){
if(n > 1){
return a*p(n-1);
}else {
return a;
}
}
其它的分析解决如下:
具有511个结点的满二叉树,其叶结点个数为( 512 )
分析:理解满二叉树的定义之后,你可以自己发现规律.即如果节点数为K则中结点数为K+1.
在n个顶点的有向完全图中,边的条数为( )
分析:有向完全图意思就是,图中的每一个点都有从自己开始到另外任意一个点的一条边.
所以容易得出边数是:2C(n,2) = n*(n-1)条边!
数组是通过( 下标 )进行索引
:数组使用方法一般为a[index]这种方式,index就是下标.
著名数列或是有规律的数数列例如斐波那契那种,要递归的规律的数要:水仙花数那种的
123ldf1年前1
tblnj1 共回答了13个问题 | 采纳率100%
.斐波那契数列的公式很烦的啊.为:1,1,2,3,5,8,13,21,34,55,89,.有公式的.和黄金分割数0.618有关的.这个百度上有.新年快乐啊 天天向上!
VB全排列算法.假设有9个数,123456789,打印所以的排列方式(即9阶乘种).用递归或更好的方法求解.例如:123
VB全排列算法.
假设有9个数,123456789,打印所以的排列方式(即9阶乘种).用递归或更好的方法求解.
例如:
123456789
123456798
123456879
123456897
.
.
.
谢谢大家的热情回答,都不错,“collapsar147”和“ XOooZ”算法本质是一样的,只能选一个回答,那就给先回答者.
fii7hy1年前0
共回答了个问题 | 采纳率
用智慧LOGO画圆.要用递归,要用到变量,要命令.起始边长(半径)是10,边长每次增加1,最长边长是200
ss斗1年前1
4501458 共回答了25个问题 | 采纳率96%
to yuan:n
if :n>200 then stop
fd :n
yuan :n+1
end
yuan 10
递归判断波浪数,求详解波浪数”是一个正整数,它的奇数列数字相等,偶数列数字也相等,但奇数列数字不等于偶数列数字.如6,4
递归判断波浪数,求详解
波浪数”是一个正整数,它的奇数列数字相等,偶数列数字也相等,但奇数列数字不等于偶数列数字.如6,47,1212和939是波浪数,372,88,555不是波浪数.设计递归函数int isWaveNum(int num),判断给定的正整数num是否是波浪数
md马1年前1
liujinzhao1105 共回答了20个问题 | 采纳率90%
#include "stdio.h"
int jsw,osw; //从右向左,最后一位是奇数位,倒数第二位是偶数位,.
int n=0;
int isWaveNum(int num)
{
n=n+1;
if(num>=1) //没算完
{
if(n%2!=0) //奇数位
{
if(num%10==jsw)
return isWaveNum(num/10);
else
return 0;
}
else //偶数位
{
if(num%10==osw)
return isWaveNum(num/10);//向前一位判断
else
return 0;
}
}
else
return 1;
}
int main()
{
int num,i;
printf("输入一个正整数:");
scanf("%d",&num);
if(num