2012-02-21 2 views
2

Вот моя функция, важная строка - это то, где я снова вызываю f().Функция, вызывающая неправильные значения

def f(num,xyz,possible,temp): 
    y = num%9 
    x = num-y 
    print num 
    for xyz[num] in possible[num]: 
     if ispossibility(temp,xyz[num],x,y) == True: 
      temp[num] = xyz[num] 
      if num != 80: 
       f(num+1,xyz,possible,temp) # i call f() with num incremented 
      else: 
       print 'yes' 
       exit() 

Выход программы

0 
1 
2 
3 
4 
5 
6 
7 
8 
3 
2 
3 
3 

Проблема заключается в том, что всякий раз, когда функция F() вызывается, переменная Num всегда должен быть увеличен на 1. Но из выходного, F () вызывается с номером 3, когда он был раньше восьми. И поэтому мне интересно, как это возможно (вывод должен быть 9 битв, а не 3), когда f() всегда называется w/num, увеличивающимся на 1. Я уже некоторое время смотрю на эту функцию, и я действительно не понимаю, что происходит.

+1

Каковы начальные значения аргументов. Другими словами: как выглядит ваш первоначальный вызов? Является ли это 'f (0, ..., ..., ...)' тем, что вместо '...' s? Также: пожалуйста, сообщите нам функцию 'ispossibility'. – Tadeck

+2

Что такое строка 'для xyz [num] в возможном [num]:' предназначена? Я не уверен, что видел это раньше. – DSM

+0

DSM Я пытаюсь сделать решатель sudoku, и поэтому у него есть все возможные номера для соответствующих полей. Таким образом, это выглядит как возможное = [[1,2], [2,4,2] ...] и т. Д. До возможного [80], у которого есть возможности для последнего окна. Посмотрев на мой код, я считаю, что использование xyz [num] не требуется. Bc я вызываю функцию, поэтому переменная будет локальной. Но в случае, если вы не понимаете, xyz [num] используется, чтобы попробовать все возможные перестановки полей. Я думаю, что знаю более/более понятный способ сделать это сейчас. Так спасибо DSM – bab

ответ

4

Вы вызываете f(num+1, ...) внутри цикла, поэтому можно позвонить по номеру f() с таким же значением для num несколько раз.

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