将递归函数重写为非递归函数

时间:2015-10-14 18:14:31

标签: c++ recursion

/plants

嗨,我需要重写这个函数,使它没有递归。我尝试用数学方法解决这个问题,但无济于事。我是编程新手,所以任何帮助都将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:3)

我认为你的问题确实应该是public static Cursor getAddressCursor(ContentResolver contactHelper, String startsWith) { logger.v("getAddressCursor"); Cursor cursor = null; try { if (startsWith != null && !startsWith.equals("")) { cursor = contactHelper.query( ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI, null, ContactsContract.Contacts.DISPLAY_NAME + " LIKE '" + startsWith + "%'", null, ContactsContract.Contacts.DISPLAY_NAME + " ASC"); } else { cursor = contactHelper.query( ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC"); } } catch (Exception e) { e.printStackTrace(); } return cursor; }

然后检查您的功能,我们看到if(x>0),否则foo(0)=1。因此foo(x)=(x-1)+2*foo(x-1)仅取决于foo(x)。因此,您可以简单地使用迭代来推进结果

foo(x-1)

如果确实是int foo(int x) { auto result=1; // result if x=0 for(int n=0; n!=x; ++n) // increment result to desired x result=n+2*result; // corresponds to (x-1)+2*foo(x-1) in original return result; } ,我会将其作为练习留给您调整代码。