C语言用递归算法求解下面这个题!!!求大神

C语言用递归算法求解下面这个题!!!求大神,第1张

以下是使用递归算法实现上述程序的C语言代码:

#include <stdioh>

float sum(int n) {

if (n == 0) { // 基本情况

return 0;

} else {

float s = 0;

for (int i = 1; i <= n; i++) { // 计算1/1+2+3++n

s += i;

}

return sum(n-1) + 1/s; // 递归调用

}

}

int main() {

int n;

printf("请输入n的值:");

scanf("%d", &n);

printf("sum = %2f\n", sum(n));

return 0;

}

在这个递归函数中,我们使用了一个基本情况,即当n等于0时,返回0作为递归的终止条件。在其他情况下,我们使用for循环计算1/1+2+3++n的值,然后通过递归调用求解sum(n-1),最后将两个结果相加。

这是一个先序遍历递归算法void

preorder(struct

bitree

root){

struct

bitree

p;

p=root;

if(p!=NULL)//不为空树

{

printf("%d\n",p->data);//先访问数据区,即根结点

preorder(p->lchild);//再访问左孩子(树)

preorder(p->rchild);//再访问右孩子(树)

}

}比如一颗完全二叉树,层次遍历为(A)(BC)(DEFG)(HIJKLMNO)按照这的先序遍历过程为:第一次调用,所以访问到A<进入第一层递归>访问以B为根结点的树(A的左子树),所以访问到B<进入第二层递归>访问以D为根结点的树(B的左子树),所以访问到D<进入第三层递归>访问以H为根结点的树(D的左子树),所以访问到H<进入第四层递归>访问H的左子树,因为H是叶子结点(即左孩子指针P=NULL),返回第三层递归,<再进入第四层递归>访问H的右子树,因为H是叶子结点(即右孩子指针P=NULL),返回第三层递归到这里H的左右子树访问完,退回到第二层递归<再进入第三层递归>访问以I为根结点的树(D的右子树),所以访问到I<进入第四层递归>访问I的左子树,因为I是叶子结点(即左孩子指针P=NULL),返回第三层递归,<再进入第四层递归>访问I的右子树,因为I是叶子结点(即右孩子指针P=NULL),返回第三层递归到这里I的左右子树访问完,退回到第二层递归到这里D的左右子树访问完,退回到第一层递归<再进入第二层递归>访问以E为根结点的树(B的右子树),所以访问到E这样依次下去最后访问到O

分析过程:

根据递归函数分析:

p(w) = p(w-1) w p(w-1)

p(3) = p(2) 3 p(2)

p(2) = p(1) 2 p(1)

p(1) = p(0) 1 p(0)

由于p(0)不会输出任何字符,故

p(2) = p(0) 1 p(0) 2 p(0) 1 p(0)

= 1 2 1

p(3) = p(2) 3 p(2)

= 1 2 1 3 1 2 1

以上就是关于C语言用递归算法求解下面这个题!!!求大神全部的内容,包括:C语言用递归算法求解下面这个题!!!求大神、遍历二叉树的递归程序详解、一个简单的C语言程序,包含递归。我对递归不是太懂,求详解递归过程及结果。关键要的是递归过程。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10178724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存