我是新手,请尝试了解递归的工作原理。
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;
}
答案 0 :(得分:1)
关于第一个问题,为什么while
不起作用,让我们看看在这种情况下代码如何运行
从一个简单的示例开始,可以说我们的char[]
仅是GH\0
,
好吧,这有点难以解释,但让我们尝试一下
首先调用back
,然后k
指向G
,因为它不是\0
,再次调用back
,其中k
为{{ 1}},因此它指向'H',而它又不是++
,因此\0
被另一个back
调用,其中这次是++k
,所以{ {1}}未执行,\0
完成了工作,现在执行返回到第二个while
调用,在该调用中使用printf
输入,但正如我们back
编辑它,我们将其移到堆栈上,现在它再次指向H
,因此运行第二个++
,现在仅剩下第一个\0
调用,猜猜printf
的位置指向?正确,它指向back
(不要忘记k
),因此再次执行H
,但是输入是++
,而输入依次是while
,因此新的++k
立即返回一个\0
,我们再次进入第一个back
调用,但是这次是指向printf
,因此另一个指向back
,我们完成了,
为了更好地理解序列,我建议运行这段代码
\0
预期产量为printf