以下是使用递归算法实现上述程序的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语言程序,包含递归。我对递归不是太懂,求详解递归过程及结果。关键要的是递归过程。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)