2013-07-22 4 views

ответ

1

Вы получите тот же результат, с последующим выполнением функции:

int f(int n) { 
    if (n) 
    return n%10 + f(n/10); 
    return 0; 
} 

В вашем случае поведение будет таким же, и вот почему. Во-первых, когда вы инициализируете статическую переменную int, значение по умолчанию равно 0 (в отличие от просто объявления int внутри тела функции). Во-вторых, единственное значение п, когда ваша функция просто принимает a значение и не присваивает это 0, потому что, когда линия a=n%10 + f(n/10) оценивали, рекурсивный f() вызов происходит назначение перед к a, и его значение остается неизменным до того f(0) вызова.

0

На каждом рекурсивном вызове f() я обозначим п и с дополнительным ' так п = 12345, а = 5 п' = 1234, а»= 4 п '' = 123, а '' = 3 n '' '= 12, a' '' = 2 n '' '' = 1, a '' '' = 1 n '' '' '= 0, a' '' '' = 0 (потому что a статичен)

ответ а + а»+ а '' + .... = 15

Примечание: a не должен быть статичным. int a = 0; сделаю.

2

Давайте претендует на компьютер:

  • F (12345)
    • сделать int a, значение 0 (как статические)
    • а = 12345% 10 + F (1234)
    • банкнота счетчик команд, поэтому мы помним, куда вернуться к
      • F (1234)
      • а = 1234% 10 + F (123)
      • примечание счетчик команд, поэтому мы вспомнить, где вернуться к
        • F (123)
        • а = 123% 10 + F (12)
        • банкнота счетчик команд, поэтому мы помним, куда вернуться к
          • F (12)
          • а = 12% 10 + е (1)
          • примечание программа счетчика, поэтому мы помним, куда вернуться к
            • F (1)
            • а = 1% 10 + F (0)
            • примечание счетчик команд, поэтому мы вспомнить, где вернуться к
              • F (0)
              • возвращают, т.е.0 (так как мы не изменили его еще)
            • возврата а = 1% 10 + 0 = 1
          • возврата а = 12% 10 + 1 = 3
        • возврата а = 123% 10 + 3 = 6
      • возврата а = 1234% 10 + 6 = 10
    • возврата а = 12345% 10 + 10 = 15
Работа выполнена.

0

Подробное использование стека зависит от компилятора. Но мы можем грубо сказать, что для каждого вызова функции f «int n» помещается в стек, занимая таким образом размер int. Если вы вызываете свою функцию рекурсивно N раз, то использование стека достигает байтов N * sizeof (int). Возможно, вам также потребуется добавить несколько байтов для возвращаемого значения.

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