2 tao496832911 tao496832911 于 2016.01.21 22:42 提问

一个关于递归的小程序,理解不了其输出结果。。。。。
c++

一个c++递归的小程序,其输出结果理解不了,请问这个递归的基例是“cout<<endl;”这个吗?

 void f(char ch){
    if (('A' <= ch) && (ch <= 'H')){
        f(ch - 1);
        cout << ch;
    }
    else
        cout << endl;
}
int main(){
    f('C');
}

输出结果为:
(空一行)
ABC

9个回答

caozhy
caozhy   Ds   Rxr 2016.01.21 23:21

这个程序递归了3次。

f('A' - 1)的结果是输出回车,此时没有递归,理解吧。
然后
f('A' )的结果回车A,其中的回车是f('A' - 1)的结果。
然后
if('B')的结果是回车AB,其中回车A是f('A' )的结果
最后
if('C')的结果是回车ABC,其中回车AB是f('B' )的结果

caozhy
caozhy 不知道怎么多了两个i
2 年多之前 回复
qq_27183003
qq_27183003   Ds   Rxr 2016.01.21 23:00

f('c')调用f('B')调用f('A')调用f('A'-1),
依次返回回车换行ABC

fafactx
fafactx   2016.01.21 22:58

不懂你的意思,就是简单的递归,什么基例。。。,你把函数全部迭代下就懂了

yjyanghang99
yjyanghang99   2016.01.21 22:59

就是把那个字符输出出来吧

Mr_dsw
Mr_dsw   Ds   Rxr 2016.01.21 23:25

一楼的解释很详细?,

whyornot
whyornot   2016.01.21 23:59

是的,终止条件会执行:cout<<endl;
输出结果是由下面的顺序决定的:
f(ch - 1);
cout << ch;

enpterexpress
enpterexpress   Rxr 2016.01.22 08:55

写一个输出的函数,这个函数调用自己本身就是递归函数的形式

John_ToStr
John_ToStr   Rxr 2016.01.23 10:12

就是将字母A到H之间的字母从A开始一次输出

Chely_Yi
Chely_Yi   2016.01.26 15:44

你要理解递归的执行 就好像子程序一样 调用子程序的时候先执行完子程序 然后子程序再返回到主程序 再继续执行主程序
递归就是不断的调用它自己 直到最后一次调用时可以返回了 再倒着往上一层一层返回 所以你看到的输出结果是倒着的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【小程序】递归实现控制台输出的文件树形结构
要求:给定任意一个目录,以树形方式展现出该目录中的所有子目录和文件,另外展现的时候目录在上面,文件在下面,每一层有缩进。 代码: package myfiles; import java.io.File; import java.util.ArrayList; import java.util.List; import org.junit.Test; /** * * 项目名称:Fi
初识多进程与多线程
1、理解进程的独立空间的实验内容及步骤   (1)编写一个程序,在其 main()函数中定义一个变量shared,对其进行循环加/减操作,并输出每次操作后的结果; Ø  编写一个C程序,实现对变量的先循环加,然后循环减,程序代码如process1.c,代码截图如下: 图1  无进程源码   Ø  对其进行编译运行,结果截图如下: 图2  程序执行结果   注:在这
利用递归输出全排列
当我们有一个所有元素都互不相同的数组,且准备把里面的元素进行全排列时,我们会怎么做? 举个例子,现在我们有一个含有1,2,3三个元素的数组,现在我们准备找出它们的全排列。大部人的做法是先在第一个位置放1,第二个位置放2,第三个地方放3;然后还是第一个位置放1,交换2和3的位置;之后换成2放在第一个,对1和3进行之前相似的做法。 那么当我们有很多数时,思路也是类似的,就是先固定前面的数的排序,然后依次
编程思想之递归
我之前写过关于递归算法的博文,但作为编程思想系列的文章不得不再对它进行进一步深入的剖析。因为它是一种简单、常用又重要的一种编程思想。什么叫递归?举一个通俗的例子:有一个8俩重的苹果要你切成重量相等的若干份,每一份的重量不能大于1俩。你肯定会想到这样做:1.第一刀先把一个苹果切成重量均等的2份A1和A2;2.再把其中的一份A1切成重量均等的两份A11和A12, 把A2切成均等的两份A21和A22;3
递归函数的理解 (三种类型)
函数的递归调用 递归问题是一个说简单也简单,说难也有点难理解的问题.我想非常有必要对其做一个总结. 首先理解一下递归的定义,递归就是直接或间接的调用自身.而至于什么时候要用到递归,递归和非递归又有那些区别?又是一个不太容易掌握的问题,更难的是对于递归调用的理解.下面我们就从程序+图形的角度对递归做一个全面的阐述. 我们从常见到的递归问题开始: 1 阶层函数 #include iostre
递归实现回文字符串判断
#include #include #include using namespace std; bool find(const char *str, int n) {     if(n     else if(str[0]==str[n-1]) return find(str+1, n-2);//去掉首尾两个,所以n-2     else return false; }
C语言实现因式分解输出
#include int isPrime (long num);//判断一个数是不是素数; void Fact (long num);//因式分解; int main() {     long num;     do     {         printf("Please intput the number: ");         scanf("%ld",&
C++_递归习题汇总
霍纳规则霍纳规则是一种使用最少数目的乘法在点x0处计算多项式的方法。如果一个多项式为A(x)=anxn+an-1xn-1+……+a1x+a0,则霍纳规则为: A(x0)=(…(anx0+an-1)x0+…+a1)x0+a0由公式可以看出括号内的部分即为递归的过程,最后递归的出口应为a0#include <iostream>using namespace std;int Horner(int *a,
PHP中使用递归函数
下面是使用递归函数的一个小例子。 目的是根据parent_id和task_id对task进行分类。 具体实现:<?php //连接数据库,使用前几天创建的数据库连接文件进行连接,如果没有这个文件可以去我的博客里找一下 require_once('./db.php'); $connect = DB::getInstance()->connect(); $sql = 'select task_i
C语言递归的应用之回文字符
递归应用之回文字符的判别:   有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。 输入:           字符串 输出:           Yes或者No 说明:           如输出Yes,说明输入的字符串是一个回文字符串           输出No,说明输入的字符串不是一个回文字符串