Consider the following function:

4 phương ánCó giải thích
Đề bài
void fun(int n)
  {if (n < 0)
    {System.out.println(“-“);
     fun(-n);
    }
    else if(n<10)
      System.out.println(n);
        else
        {fun(n/10);
         System.out.println(n%10);
        }
  }

Which call will result in the most recursive calls?

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "fun(-1023);". Hàm có ba nhánh: n âm thì in dấu trừ rồi gọi lại với -n, n nhỏ hơn 10 thì in n và dừng, còn lại gọi fun(n/10) rồi in chữ số hàng đơn vị. Vậy số lời gọi đệ quy bằng số chữ số trừ một, cộng thêm một lần nữa nếu đối số âm. Với "fun(-1023);" chuỗi gọi là fun(-1023), fun(1023), fun(102), fun(10), fun(1), tức bốn lời gọi đệ quy, nhiều nhất trong các mức được nêu. Lời gọi "fun(1023);" cũng có bốn chữ số nhưng không cần bước đổi dấu nên chỉ ba lời gọi đệ quy. Lời gọi "fun(100);" có ba chữ số và dương, cho hai lời gọi là fun(10) rồi fun(1). Lời gọi "fun(0);" rơi ngay vào nhánh n nhỏ hơn 10, in 0 rồi kết thúc mà không gọi lại lần nào.

Cùng phần 3

Xuất hiện trong 1 bộ đề