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   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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!