gpt4 book ai didi

c++ - 使用 while 和 if 递归打印字符

转载 作者:行者123 更新时间:2023-11-30 04:52:55 25 4
gpt4 key购买 nike

我是初学者,尝试了解递归的工作原理。使用 while 和 if int 代码有什么不同?为什么如果我使用“如果”它会产生正确的结果?但是“同时”不是吗?while(*k) ,当它到达 "\0"时,它只打印一次,然后再次返回 while 循环
非常感谢您的帮助!!

 #include <stdio.h>
#include <stdlib.h>
void back(char*k){
if(*k) // works
//while(*k) ->not work??
back(++k);
printf("%c",*k);
}

int main()
{
char k[]="hellomynameis";
back(k);
printf("Hello world!\n");
return 0;
}

有没有可能在 C++ 中做同样的事情但使用迭代器?

#include <iostream>
#include <string>

using namespace std;

void backk(string a){
string::iterator itr;
for (itr=a.begin();itr!=a.end();itr++){
if (*itr)
backk(++itr);
cout<<a; --> is this possible ?

//simple and fast solution
for (itr=a.end();itr!=a.begin();itr--){
if(*itr)
cout<<*itr;
}
}
}

int main()
{
string a("hello my name is");
backk(a);
cout << "Hello world!" << endl;
return 0;
}

最佳答案

关于为什么 while 不起作用的第一个问题,让我们看看代码在这种情况下如何运行
从一个简单的例子开始,为了简单起见,假设我们的 char[] 只是 GH\0,嗯,有点难以解释,但让我们试试
首先调用 back 并且 k 指向 G,因为它不是 \0back 再次被调用,k++ 编辑所以它指向 'H' 并且它再次不是 \0 所以back被另一个++k调用,此时是\0,所以while不执行, printf 完成它的工作,现在执行返回到第二个 back 调用,它是用 H 输入调用的,但是当我们 + + 编辑它,我们将它移到堆栈上,现在它再次指向 \0,所以第二个 printf 运行,现在只有第一个 back 调用仍然存在,猜猜 k 指向哪里?对了,它指向的是H(别忘了++),所以又执行了一次while,但是输入的是++ k 又是 \0,所以新调用的 back 立即返回一个 printf,我们又在第一个 back 调用,但这次指向 \0 所以另一个 printf 我们就完成了,
为了更好地理解序列,我建议运行这段代码

#include <stdio.h>
#include <stdlib.h>
void back(char*k)
{
printf("%c",'O');

while(*k) //->not work??
{
back(++k);
}

printf("%c",'f');
}

int main()
{
char k[]="he";
back(k);
return 0;
}

预期的输出是OOOffOff

关于c++ - 使用 while 和 if 递归打印字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54050064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com