需要为C ++中的以下问题设计一个递归算法

时间:2018-10-14 13:57:33

标签: c++ recursion

一种递归算法,它获取整数n和整数数组A作为输入,并检查给定数组是否 A包含两个整数,使得n = A [i] + A [j],其中A [i]和A [j]可以位于数组中的任意位置。
  这就是我想出的

#include <iostream>
using namespace std;

void func(int arr[],int size,int n)
{
  if (size==1)
    return;
  else
  {
    for (int i=0;i<n;i++)
        for (int j=i+1;j<n;j++)
            if (arr[i]+arr[j]==n)
            {
                cout<<"yes";
                return;
            }
    func(arr,size-1,n);
   }
}

int main()
{
  int A[] = {1,2,3,4,5};
  int n = 8;
  func(A,5,n);
  return 0;
}

我知道它正在使用递归,但是我想要一个避免所有不必要迭代的递归函数。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

#include <iostream>
using namespace std;

void func(int arr[],int index,int size,int n)
{

    if(index==size-1)
        return;

  int flag=0;

        for (int j=index+1;j<size;j++)
            if (arr[index]+arr[j]==n)
            {
                flag=1;
                cout<<"yes";
            }

   if(flag==0)
    func(arr,index+1,size,n);
}

int main()
{
  int A[] = {1,2,3,4,5};
  int n = 6;
  func(A,0,5,n);
  return 0;
}

如果您确实想要递归代码,则这可能是一种实现。我所做的就是从第0个索引开始,并将其与其他所有元素相加,然后与“ n”进行比较。如果匹配良好,则使用下一个索引(上一个索引+ 1)进行递归调用。