一种递归算法,它获取整数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;
}
我知道它正在使用递归,但是我想要一个避免所有不必要迭代的递归函数。任何帮助将不胜感激!
答案 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)进行递归调用。