我很难写一个使用递归返回斐波纳契数列的方法。
我的迭代方法如下:
public class Map : MonoBehaviour {
public static int Row = 7;
public static int Col = 7;
private GameObject[,]boardPiece = new GameObject[Row,Col];
public GameObject prefab;
public GameObject prefab2;
void Start () {
for (int i = 0; i < Row; i++) {
for (int j = 0; j < Col; j++)
{
if(i%2 ==1 && j%2 ==1 || i%2 ==0 && j%2 ==0)
{
boardPiece[i,j] = (GameObject)Instantiate(prefab, new Vector3(i*4.0f,0,j*4.0f),Quaternion.identity);
}else{
boardPiece[i,j] = (GameObject)Instantiate(prefab2, new Vector3(i*4.0f,0,j*4.0f),Quaternion.identity);
}
boardPiece[i,j].GetComponent<BoardPiece>().setRC(i,j);
}
}
}
}
public class BoardPiece : MonoBehaviour {
private int rowPlace;
private int colPlace;
// Use this for initialization
void Start () {
rowPlace = 0;
colPlace = 0;
}
// Update is called once per frame
void Update () {
}
void OnMouseOver(){
string message = "Row: " + rowPlace + " Col: " + colPlace;
print (message);
}
public void setRC(int R, int C)
{
rowPlace = R;
colPlace = C;
print ("set " + rowPlace + "," + colPlace);
}
}
我希望将上面的方法更改为递归调用但具有相同的签名,即返回类型为字符串,它返回Fibonacci系列,例如0,1,1,2,3,5,8,13,21,34,55 < / p>
我用谷歌搜索,但我发现使用Console.WriteLine()完成了所有操作,即值被打印到屏幕但不会从函数返回为字符串。
由于
答案 0 :(得分:2)
当然,网上有很多Fibonacci算法的例子,递归和其他方式。当然,递归实现的关键是从递归调用中获取结果,将其与当前结果相结合,然后将 返回给调用者。
因此,让我们从基本的Fibonacci想法开始,使用递归方法,只需在生成数字时写出数字:
void Fibonacci(int iMinus2, int iMinus1, int count)
{
if (count == 0) return;
int current = iMinus2 + iMinus1;
Console.WriteLine(current);
Fibonacci(iMinus1, current, count - 1);
}
那么问题是,我们如何调整上述内容以便它返回string
而不是一次只写出一个数字。同样,请记住,关键是始终有办法将当前结果与先前调用的组合结果相结合。在这种情况下,这意味着我们希望将当前数字转换为字符串,并将该字符串前置到递归调用返回的字符串(在当前数字之后的所有数字:
string Fibonacci(int iMinus2, int iMinus1, int count)
{
if (count == 0) return null;
int current = iMinus2 + iMinus1;
string nextNumbers = Fibonacci(iMinus1, current, count - 1);
return nextNumbers != null ?
current.ToString() + ", " + nextNumbers : current.ToString();
}
注意:上面的内容比我建议的要复杂一些,因为它可以避免在没有下一个数字的情况下添加逗号。还有其他方法可以实现这一点,但我更喜欢实现递归方法,以便终止条件由被调用者而不是调用者处理。
我把它作为练习让读者处理上述问题,以及如何处理短序列(即简单的情况,其中一个人只看序列中的第一个或前两个数字)。 :)
注意:你的问题听起来很像家庭作业问题。如果是这样的话:这些在Stack Overflow上是合适的,但是我不能强调Stack Overflow不应该被认为是替代你的老师。我们很乐意为您提供有关家庭作业问题的建议和帮助,但与您的老师建立关系并寻求他们的建议非常重要,这样他们才能更好地了解您遇到麻烦的地方。