当前位置:首页 » 操作系统 » 递归算法c

递归算法c

发布时间: 2022-01-27 20:41:47

c语言问题(关于递归算法

n=6 f1为n=5时的*s f2为n=4时的*s
n=5 f1为n=4时的*s f2为n=3时的*s
n=4 f1为n=3时的*s f2为n=2时的*s
n=3 f1为n=2时的*s f2为n=1时的*s
n=2 n=3的*s 都是知道的 那就可以逆推回去 得到n=6时的*s 这个就是main中 x的值喽

Ⅱ 什么情况下要用到递归算法C语言中的

在一个子程序(过程或函数)的定义中又直接或间接地调用该子程序本身,称为递归。 递归是一种非常有用的程序设计方法。用递归算法编写的程序结构清晰,具有很好的可读性。 递归算法的基本思想是:把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。 利用递归算法解题,首先要对问题的以下三个方面进行分析: 把这些步骤或等式确定下来。 把以上三个方面分析好之后,就可以在子程序中定义递归调用。 记得C里面有一个汉诺塔,就是非用递归才能解决的一个问题!可以仔细理解一下哦!

Ⅲ 什么是递归算法

递归算法就是一个函数通过不断对自己的调用而求得最终结果的一种思维巧妙但是开销很大的算法。
比如:
汉诺塔的递归算法:
void move(char x,char y){
printf("%c-->%c\n",x,y);
}

void hanoi(int n,char one,char two,char three){
/*将n个盘从one座借助two座,移到three座*/
if(n==1) move(one,three);
else{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}

main(){
int n;
printf("input the number of diskes:");
scanf("%d",&n);
printf("The step to moving %3d diskes:\n",n);
hanoi(n,'A','B','C');
}
我说下递归的理解方法
首先:对于递归这一类函数,你不要纠结于他是干什么的,只要知道他的一个模糊功能是什么就行,等于把他想象成一个能实现某项功能的黑盒子,而不去管它的内部操作先,好,我们来看下汉诺塔是怎么样解决的
首先按我上面说的把递归函数想象成某个功能的黑盒子,void hanoi(int n,char one,char two,char three); 这个递归函数的功能是:能将n个由小到大放置的小长方形从one 位置,经过two位置 移动到three位置。那么你的主程序要解决的问题是要将m个的"汉诺块"由A借助B移动到C,根据我们上面说的汉诺塔的功能,我相信傻子也知道在主函数中写道:hanoi(m,A,B,C)就能实现将m个块由A借助B码放到C,对吧?所以,mian函数里面有hanoi(m,'A','C','B');这个调用。
接下来我们看看要实现hannoi的这个功能,hannoi函数应该干些什么?
在hannoi函数里有这么三行
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
同样以黑盒子的思想看待他,要想把n个块由A经过B搬到C去,是不是可以分为上面三步呢?
这三部是:第一步将除了最后最长的那一块以外的n-1块由one位置经由three搬到two 也就是从A由C搬到B 然后把最下面最长那一块用move函数把他从A直接搬到C 完事后 第三步再次将刚刚的n-1块借助hannoi函数的功能从B由A搬回到C 这样的三步实习了n块由A经过B到C这样一个功能,同样你不用纠结于hanoi函数到底如何实现这个功能的,只要知道他有这么一个神奇的功能就行
最后:递归都有收尾的时候对吧,收尾就是当只有一块的时候汉诺塔怎么个玩法呢?很简单吧,直接把那一块有Amove到C我们就完成了,所以hanoni这个函数最后还要加上 if(n==1)move(one,three);(当只有一块时,直接有Amove到C位置就行)这么一个条件就能实现hanoin函数n>=1时将n个块由A经由B搬到C的完整功能了。
递归这个复杂的思想就是这样简单解决的,呵呵 不知道你看懂没?纯手打,希望能帮你理解递归
总结起来就是不要管递归的具体实现细节步骤,只要知道他的功能是什么,然后利用他自己的功能通过调用他自己去解决自己的功能(好绕口啊,日)最后加上一个极限情况的条件即可,比如上面说的1个的情况。

Ⅳ C语言二叉树递归算法怎么做

#include<stdio.h>
#include<string.h>

structtreenode{
intvalue;
treenode*left;
treenode*right;
};
typedeftreenode*BiTree;

voidvisit(treenode*node)
{
printf("%2d",node->value);
}

//结点总数
intnode(BiTreeT)
{
if(!T){
return0;
}
returnnode(T->left)+node(T->right)+1;
}

//前序
voidpreOrder(BiTreeT)
{
if(T){
visit(T);
preOrder(T->left);
preOrder(T->right);
}
}

//中序
voidinOrder(BiTreeT)
{
if(T){
inOrder(T->left);
visit(T);
inOrder(T->right);
}
}

//后序
voidpostOrder(BiTreeT)
{
if(T){
postOrder(T->left);
postOrder(T->right);
visit(T);
}
}

//叶子节点数
intleafnode(BiTreeT)
{
if(T){
if(!T->left&&!T->right)
return1;
else
leafnode(T->left)+leafnode(T->right);
}else{
return0;
}
}

intheight(BiTreeT)
{
if(T){
intlh=height(T->left);
intrh=height(T->right);
return(lh>rh?lh:rh)+1;
}else{
return0;
}
}

intmain()
{


return0;
}

Ⅳ c语言递归算法

http://hi..com/302503131/blog/item/5a512650074fc3878d543023.html

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

c语言中递归的最经典应用是求两个数的最小公约数,代码如下:

int MinDivisor( int m, int n)
{
if(m%n==0)
return n;
else
return MinDivisor(n, m%n);
}

Ⅶ C语言递归算法是怎么执行的

递归就是自己调用自己,例如你写的 net()函数,函数自己调用自己。
它调用自己的时候,不管程序运行到了哪,见到自己直接跳转,进入到下一个自己中运行,直到不满足跳入下一个自己的条件时,运行完当前函数,然后回到前一个自己中,回到跳出位置,继续运行没有完事的部分,直到完成当前函数,然后回到上一个自己。。。。这样直到回到第一个自己,运行开始跳出时没有完成部分的程序。这就是递归;

Ⅷ C语言递归算法的原理是什么

调用自身,完成重复性工作。也就是在函数或子过程的内部,直接或者间接地调用自己的算法。

如:3! = 2! * 3 2! = 1! * 2 1! = 1
所以;
s(n) {
if (n == 1 || n == 0)
return (1);
else
return (n * s(n-1));
}

Ⅸ c语言 递归算法

1 你得到 的代码,就应该知道fac的作用
2 是结束递归条件
3、是结束时终值

Ⅹ 递归实现计算 c语言

int rec(int x,int n)
{
if(n==0)
return 1;
else
return rec(x,n-1)*x;
}
int main()
{
int x,n;
printf("请输入x和n\n");
scanf("%d%d",&x,&n);
printf("结果是:%d\n",rec(x,n));
}

热点内容
服务器请求慢怎么排查 发布:2024-11-15 06:55:35 浏览:320
php自学还是培训 发布:2024-11-15 06:54:05 浏览:182
在哪里找到sim卡设置密码 发布:2024-11-15 06:51:47 浏览:392
细说phppdf 发布:2024-11-15 06:38:35 浏览:276
征途PK脚本 发布:2024-11-15 06:37:51 浏览:680
vbs打不开编译器错误 发布:2024-11-15 06:35:12 浏览:344
深海迷航密码在哪里 发布:2024-11-15 06:30:23 浏览:303
服务器日志怎么分析 发布:2024-11-15 06:22:04 浏览:525
字体目录在哪个文件夹 发布:2024-11-15 06:20:28 浏览:181
php种子怎么打开 发布:2024-11-15 06:07:01 浏览:346