3

所以一直在为我过去的考试而学习,遇到了这个问题,问如果 num = 7,返回值是多少?将它插入 BlueJ 告诉我 16,func1 做了什么使它成为 16?声明的方法如何在方法中再次使用?我搜索但很难找到这个确切的例子,因为它只是正常使用方法。

谢谢,

public int func1(int num) 
{
  if ( num <= 2 ) return 1;
  return func1(num – 2) + num;
}
4

6 回答 6

6

这是对您使用它的同一函数的递归调用。

因此,func1(num – 2)将调用相同的函数 - public int func1(int num)with num = num - 2, untilnum >= 2

所以,你的递归是这样的: -

func(n)
   calls func(n-2)
      calls func(n-4)
         .. so on
         calls func(1)
            returns 1
         returns 1 + 3 + ... + (n - 4)
      returns 1 + 3 + ... + (n - 4) + (n - 2) 
   returns 1 + 3 + ... + (n - 4) + (n - 2) + n

更新: - 概括了上面的递归,让你弄清楚它是如何工作的。

你可以通过: -递归 - 维基页面

于 2012-10-29T09:47:34.677 回答
3

这称为递归。理解它的最好方法是在调试器中观察它,并考虑调用序列将如何终止(即它为什么不无限期地调用自身)。

(对不起 - 因为这是家庭作业/考试相关,所以没有给你一个完整的答案)

于 2012-10-29T09:47:10.897 回答
1

好吧,这就是递归的全部意义。该方法被递归调用,直到满足某个退出条件。在您的情况下,退出条件是方法参数值达到 <= 2 的值

于 2012-10-29T09:48:52.217 回答
1

要理解递归,首先要理解递归。

在这里你可以找到一个很好的解释。

于 2012-10-29T09:49:42.423 回答
0

你想看的东西(特别是你的考试)叫做递归

该函数使用不同的参数值调用自身,直到满足内部标准。

于 2012-10-29T09:48:35.957 回答
0

声明的方法如何在方法中再次使用?

答:在称为递归的方法中调用相同的方法(计算机科学)

您可以不使用循环使用递归

public int func1(int num) {
        int res=1;
        while(num >= 2 ) {
            res += num;
            num = num-2;
        }
        return res;
    }

但是,当您使用 Tree、Hierarchy 等时,递归是代码重用最重要的特性之一,

于 2012-10-29T09:52:12.103 回答