#include
int binary_search_recursive(int arr[], int left, int right, int query);

int main ()
{
int arr[10];
int left, right, query;
int i , res_r;

printf ("请输入数据：");
for (i = 0; i <= 9; i++)
scanf ("%d" , &arr[i]);

printf ("输入区间：");
scanf ("%d%d" , &left , &right);

printf ("输入要查找的数据：");
scanf ("%d" , &query);

res_r = binary_search_recursive(arr , left , right , query);

printf ("%d\n" , res_r);
return 0;

}
int binary_search_recursive(int arr[], int left, int right, int query)
{
int low = left , high = right , mid;
int flag = 0;

mid = (low + high) / 2;
if (low > high)
flag = -1;
if (query == arr[mid])
flag = 1;
if (arr[mid] > query)
binary_search_recursive(arr , low , mid - 1 , query);
else
binary_search_recursive(arr , mid + 1 , high , query);

if (flag == 1)
return mid;
if (flag == -1)
return -1;

}

3个回答

low > high 应该直接返回了，你还在继续递归

Debug_dodge 是的，底下那个flag=1的也改成返回。你这个无限递归了
2 年多之前 回复
qq_40833445 那是直接把flag=-1改成return -1吗？
2 年多之前 回复

int binary_search_recursive(int arr[], int left, int right, int query)
{

int low = left , high = right , mid;
mid = (low + high) / 2;
if (low > high)
return -1;
if (query == arr[mid])
return mid;
if (arr[mid] > query)
return binary_search_recursive(arr , low , mid - 1 , query);
else
return binary_search_recursive(arr , mid + 1 , high , query);

}

python：用递归方法编写二分法查找函数 程序报错

### 递归问题，求各位大神解答 这个递归哪里出问题了，为什么程序没有结果？ ___ ```c++ //根据 P/4=1-1/3+1/5-1/7.... 求P的近似值，要求精度为0.000001 #include"iostream" using namespace std; int Temp(int n){//求-1的n次方 if(n==0)return 1; return -1*Temp(n-1); } double PI(){ double sum=0; double temp=1.0; int count=0;//计数变量 while(temp>=1e-6){ count++; sum=sum+Temp(count-1)*temp; temp=1.0/(2*count+1); } return 4*sum; } int main(){ cout<<"------------求PI的值-------------"<<endl<<endl<<endl<<endl; cout<<"根据 P/4=1-1/3+1/5-1/7.... 求P的近似值，要求精度为0.000001"<<endl<<endl; double Pi=PI(); cout<<"PI="<<Pi; return 0; } ```

C语言 递归，好像跳不出递归循环了，求大神帮忙看看

int length(char * str) { if (*str == '\0') { return 0; } else { return (1+length(++str)); } } char str[10]="abcde"; 这个递归最后返回来的为什么会是5 不是应该返回0吗 求大神解惑

#include <iostream> #include <cstdio> #include <cstring> #define MAX 100 using namespace std; typedef struct fibo { int i1j1; int i1j2; int i2j1; int i2j2; }fibo; fibo a[MAX]; fibo FIBO(int num); fibo MUL(fibo x,fibo y) {//x、y，2个矩阵相乘， fibo w; w.i1j1=x.i1j1*y.i1j1+x.i1j2*y.i2j1; w.i1j2=x.i1j1*y.i1j2+x.i1j2*y.i2j2; w.i2j1=x.i2j1*y.i1j1+x.i2j2*y.i2j1; w.i2j2=x.i2j1*y.i1j2+x.i2j2*y.i2j2; return w; } fibo FIBOMUL(fibo x,fibo y,fibo z,int num) { fibo r; if(num<=2) return((MUL(MUL(x,y),z))); else return(MUL(FIBO(num),FIBO(num)),z); } fibo FIBO(int num) { a[0].i1j1=a[0].i2j2=1; a[0].i1j2=a[0].i2j1=0; a[1].i1j1=a[1].i1j2=a[1].i2j1=1; a[1].i2j2=0; a[2].i1j1=2; a[2].i1j2=a[2].i2j1=a[2].i2j2=1; fibo result=a[0]; if(num==1) return a[1]; else if(num==2) return a[2]; else{ if(num%2==1) result=FIBOMUL(a[num/2],a[num/2],a[1],num/2); else result=FIBOMUL(a[num/2],a[num/2],a[0],num/2); } return result; } void main() { fibo x; x=FIBO(8); cout<<x.i1j1<<x.i1j2<<x.i2j1<<x.i2j2; getchar(); getchar(); }

C#不依赖系统库函数用递归实现一个二分查找的算法，越简单越好，谢谢啦

C#不依赖系统库函数用递归实现一个二分查找的算法，越简单越好，谢谢啦

JS递归查找对象数组的某个值？

**代码如下** 任意给一个对对象或者数组，通过遍历，递归查找其中是否存在某个值， 代码我已经写的差不多了，但是只支持单次查找。 因为flag重置问题没法解决。 如果在函数体最后if里面，flag= false，则涉及到对象中的数组的时候就不起作用了。因为if(flag)虽然执行了 但是**并没有跳出递归。** 所以我的问题就是怎么正确重置flag~ 希望有朋友能够解惑~_** ``` <script type="text/javascript"> var flag = false; function exitindata(data,item){ if(data instanceof Array){ var i = data.length; while(i--){ if(flag){ break; } if(data[i] === item){ flag = true; break }else{ if(data[i] instanceof Array || data[i] instanceof Object){ exitindata(data[i],item); } } } }else{ for(var key in data){ if(flag){ break } if(data.hasOwnProperty(key) === true){ if(data[key] === item){ flag = true; break }else{ if(data[key] instanceof Array || data[key] instanceof Object){ exitindata(data[key],item); } } } } } if(flag){ return true; }else{ return null } } function find(item){ var data = [9, { item1:50, item2:94, item3:[ { cc: 9999, ff:9090 } ] } ,65,1111,54,11,0,1,3,7,8,5,649,841]; console.log(exitindata(data,item)); } find(9090) find(9091) find(9999) </script> ``` 单次查找没问题。 多次就出问题啦

//数列1,1,2,3,5,8,13,21,34... ...求第n项 class FuncDemo11 { public static void main(String[] args) { System.out.println(getNData(8)); } public static int getNData(int n) { if(n==1||n==2) return 1; return getNData(n-1)+getNData(n-2); } } 这个递归程序的第8项不应该是21吗？？ 这个程序返回的具体步骤是怎样的？ 求大神帮我解答一下，谢谢！！

C语言怎么用二分法求一元三次方程的根。啊 能不能把程序打出来一下谢了！！！

C语言怎么用递归求组合数

java 递归报错 求大神帮忙

``` private List<Post> getPostLower(List<Post> PostTops){ List<Post> postAll=new ArrayList<Post>(); // 上级 for(Post post:PostTops){ //查询到下级 List<Post> posts=basService.queryPostByParentId(post.getPostId()); //如果有下级 重新调用 if(posts!=null && posts.size()>0){ posts=getPostLower(posts); post.setPosts(posts); } postAll.add(post); } return postAll; } ``` 做了个查询树形递归 但是递归次数太多报错了。。。除了修改内存有什么方法避免这个错误吗

sqlserver 用CTE 递归 排序问题 求大神指教啊

create table t_manage (f_gener int,f_accounts varchar(100) null, f_firstGener varchar(100) null, f_secondGener varchar(100) null, f_thirdGener varchar(100) null, f_joindate datetime null ) select * from dbo.t_manage insert into dbo.t_manage values('1','BV51','F51','D51',null,'2013-11-08 12:02:29.477') insert into dbo.t_manage values('1','CY51','F51','D51',null,'2014-05-03 13:48:05.240') insert into dbo.t_manage values('1','CY52','F51','D51',null,'2014-07-08 11:44:37.927') insert into dbo.t_manage values('1','BV58','F51','D51',null,'2014-09-25 14:26:16.397') insert into dbo.t_manage values('1','BV519','F51','D51',null,'2014-09-28 11:54:05.190') insert into dbo.t_manage values('1','BV520','F51','D51',null,'2014-09-28 12:01:40.753') insert into dbo.t_manage values('1','D518','F51','D51',null,'2014-09-28 12:04:37.537') insert into dbo.t_manage values('1','CY518','F51','D51',null,'2014-09-28 15:22:20.727') insert into dbo.t_manage values('1','BU5103','F51','D51',null,'2014-09-28 16:52:37.243') insert into dbo.t_manage values('2','BU5101','CY51','F51','D51','2013-11-08 12:02:29.477') insert into dbo.t_manage values('2','BU591','CY51','F51','D51','2014-05-03 13:48:05.240') insert into dbo.t_manage values('2','CY58','CY52','F51','D51','2014-07-08 11:44:37.927') insert into dbo.t_manage values('2','BV57','CY52','F51','D51','2014-09-25 14:26:16.397') insert into dbo.t_manage values('2','BV59','BV58','F51','D51','2014-09-28 11:54:05.190') insert into dbo.t_manage values('2','BV510','CY52','F51','D51','2014-09-28 12:01:40.753') insert into dbo.t_manage values('2','CY59','CY52','F51','D51','2014-09-28 12:04:37.537') insert into dbo.t_manage values('2','D512','CY52','F51','D51','2014-09-28 15:22:20.727') insert into dbo.t_manage values('2','F510','CY52','F51','D51','2014-09-28 16:52:37.243') insert into dbo.t_manage values('2','CY510','CY52','F51','D51','2014-09-25 14:26:16.397') insert into dbo.t_manage values('2','D513','CY52','F51','D51','2014-09-28 11:54:05.190') insert into dbo.t_manage values('2','BV512','BV51','F51','D51','2014-09-28 12:01:40.753') insert into dbo.t_manage values('2','F511','CY52','F51','D51','2014-09-28 12:04:37.537') insert into dbo.t_manage values('2','BV521','BV51','F51','D51','2014-09-28 15:22:20.727') insert into dbo.t_manage values('2','CY515','BV51','F51','D51','2014-09-28 16:52:37.243') insert into dbo.t_manage values('3','D511','BV59','CY52','F51','2014-09-25 14:55:08.010') insert into dbo.t_manage values('3','Z58','CY58','CY52','F51','2014-09-25 15:33:19.227') insert into dbo.t_manage values('3','BU597','BV510','CY52','F51','2014-09-25 17:49:45.923') insert into dbo.t_manage values('3','BV511','F510','CY52','F51','2014-09-26 14:28:34.310') insert into dbo.t_manage values('3','Z510','BV510','CY52','F51','2014-09-27 11:47:40.927') 这是一张表 以及表中内容 f_gener=1表示第一代 f_gener=2表示第二代 f_gener=3表示第三代 f_joindate表示加入日期 现在要求：以第一代为主排序，再以第二代细分第三代，第一代排序越晚加入帐号排在越前面，第二代，第三代再按照先后顺序排序 排序需求： 以第一代帐号排序 越晚加入帐号排在越前面，第二代和第三代再按照加入先后顺序依序排列。 现在写的sql可以做到各代层级正确，第一代帐号也能满足越晚加入越前面。但是第二代和第三代就没办法做到了 求指教啊 WITH personreleation AS ( select * from ( SELECT row_number() over(order by f_joindate desc) xh,a.f_accounts,a.f_firstGener,a.f_secondGener,a.f_thirdGener,a.f_joindate, cast(f_firstGener+'\'+ f_accounts AS VARCHAR(200)) AS Full_Code,cast(1 as int) as f_gener FROM t_manage a with(nolock) WHERE f_firstGener = 'F51') as m UNION all SELECT c.xh,b.f_accounts,b.f_firstGener,b.f_secondGener,b.f_thirdGener,b.f_joindate, cast(c.Full_Code +'\'+ b.f_accounts AS VARCHAR(200)) AS Full_Code,cast(c.f_gener+1 as int) as f_gener FROM t_manage AS b with(nolock) INNER join personreleation AS c ON b.f_firstGener= c.f_accounts ) ,results as ( SELECT ROW_NUMBER() OVER(ORDER BY xh,Full_Code,f_joindate desc) rownumber, * FROM personreleation with(nolock) where 1=1 ) select * from results where rownumber BETWEEN 1 AND 50

###代码如下，请问这个递归哪里出问题了，问什么程序没有结果 <pre> //根据 P/4=1-1/3+1/5-1/7.... 求P的近似值，要求精度为0.000001 #include"iostream" using namespace std; int Temp(int n){//求-1的n次方 if(n==0)return 1; return -1*Temp(n-1); } double PI(){ double sum=0; double temp=1.0; int count=0;//计数变量 while(temp>=1e-6){ count++; sum=sum+Temp(count-1)*temp; temp=1.0/(2*count+1); } return 4*sum; } int main(){ cout<<"------------求PI的值-------------"<<endl<<endl<<endl<<endl; cout<<"根据 P/4=1-1/3+1/5-1/7.... 求P的近似值，要求精度为0.000001"<<endl<<endl; double Pi=PI(); cout<<"PI="<<Pi; return 0; } </pre>

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内，我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年，古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合，再掺入煅烧石灰石制成的石灰，由此得来了人...

C++11：一些微小的变化（新的数据类型、template表达式内的空格、nullptr、std::nullptr_t）

HashMap底层实现原理，红黑树，B+树，B树的结构原理 Spring的AOP和IOC是什么？它们常见的使用场景有哪些？Spring事务，事务的属性，传播行为，数据库隔离级别 Spring和SpringMVC，MyBatis以及SpringBoot的注解分别有哪些？SpringMVC的工作原理，SpringBoot框架的优点，MyBatis框架的优点 SpringCould组件有哪些，他们...

【阿里P6面经】二本，curd两年，疯狂复习，拿下阿里offer

《经典算法案例》01-08：如何使用质数设计扫雷（Minesweeper）游戏

《Oracle Java SE编程自学与面试指南》最佳学习路线图（2020最新版）