2016-12-09 3 views
2

Я пытаюсь генерировать дополнительные комбинации из строки, как:Рекурсивного реализация вложенного цикла

// for "23405" 
2 
3 
4 
5 
23 
34 
40 
05 
234 
340 
405 
2340 
3405 
23405 

Я делаю это с помощью вложенных циклов:

str := "23405" 
for i := 0; i <= len(str); i++ { 
    for j := 0; j <= i; j++ { 
     fmt.Println(str[j:i]) 
    } 
} 

Можно ли сделать то же самое с рекурсивной функцией? Я пишу это с go, но пример на любом языке был бы полезен. Вот площадка link.

+0

Что об использовании генератора в Python? –

ответ

2

Вот моя попытка рекурсии: https://repl.it/ElYY/9

package main 

import "fmt" 

func reverse(str string, length int, i int) { 
    if len(str) > length+i && length > 0 { 
    fmt.Println(str[i:length+i]) 
    reverse(str, length, i+1) 
    } else if len(str) == length+i && length > 0 { 
    fmt.Println(str[i:length+i]) 
    reverse(str, length-1, 0) 
    } 
} 

func recIterate(str string, length int, i int) { 
    if length > i { 
    fmt.Println(str[i:len(str)-length+i+1]) 
    recIterate(str, length, i+1) 
    } else if length == i && length > 0{ 
    recIterate(str, length-1, 0) 
    } 
} 

func main() { 
    str := "234051234" 
    recIterate(str, len(str), 0) 
    // reverse(str, len(str), 0) 
} 

крикнуть nexus66 за помощь ~

+1

Почему в конце много пустых пространств? –

+0

Если вы хотите, посмотрите правильный вывод [здесь] (https://repl.it/ElYx/0) и попытайтесь улучшить свой код. –

+1

@ nexus66 Нашел. Все еще проходило, когда 'length = 0' – Ethan

Смежные вопросы