2015-09-26 47 views
0

我有一个包含一个涉及递归调用过程的步骤的过程。我希望某个动作不是第一次完成,而是在其他时候以递归方式进行。为了确保在递归调用中只发生一次动作

def a(string): 
    while string.startswith('/'): 
     string =string[1:] 
    stringa = string.split('/',1) 

    if(len(stringa)>1): 
     a(stringa) 

基本上我的字符串的类型是/a/b/c/d。我想在第一时间期间和相继的递归作为
stringa具有stringa作为{/}{a/b/c/d} = {A} {B/C/d}
stringa = {B} {C/d}
stringa = {C} { d}

+0

想到有一个标志初始设置为false,但设置为true,一旦它存在循环 – csharpcoder

+0

你试过了什么?你是否在递归调用之前通过打印stringa来尝试调试,并试图让stringa成为你想要的格式?在()的开始处打印字符串也是一个好主意。递归函数可能是一个很难调试的问题,如果可以的话,可以考虑使用for循环,如果你明白我的意思,也可以更容易地实现你的第一次操作,因为没有任何递归。 – barny

+0

无论如何,你的代码不起作用,因为你期望一个字符串,但'stringa'是一个列表。 –

回答

1

基本模式是使用一个标志。您可以将该标志设置为默认参数,以便在首次调用该函数时不必传递该标志,然后函数在递归调用时设置(或取消设置...)该标志。

它看起来是这样的:

def some_function(..., is_first=True): 
    if is_first: 
     # code to run the first time 
    else 
     # code to run the other times 
    # recurse 
    some_function(..., is_first=False) 

我不知道如何翻译,为您的代码,因为它目前还不清楚你想要做的只是在第一次什么。另外,你首先传递一个字符串,但你的递归调用传入一个列表。