日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二分查找递归和非递归方法分析

發布時間:2023/11/29 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二分查找递归和非递归方法分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遞歸實現:

自己寫的遞歸:多一個賦值操作,雖然可以得到正確的結果。但是比較難以理解。

問題:沒有深刻理解遞歸返回值。return會在遞歸調用到最后,在遞歸結束的地方,會將返回值一層一層返回給方法,直到返回最后一層也就是方法不進行遞歸演算的動作時。

總結:首先要記住遞歸有遞歸頭和遞歸體,遞歸頭可能有多重情況。遞歸體也可能有多重情況。

public static int binarySearch(int[] arr,int n){int low=0;int high=arr.length-1;return binarySearch2(arr,low,high,n);}public static int binarySearch2(int[] arr,int low,int high,int n){int z=(low+high)/2;int i=-1;if(low<=high){if(arr[z]==n ){return i=z;}else{if(arr[z]>n){high=z-1;}else if(arr[z]<n){low=z+1;}return binarySearch2(arr,low,high,n);}}return i;}

網友的遞歸:

沒有找到對應值,遞歸結束會走對應的遞歸頭

找到對應值,遞歸結束走對應遞歸頭

public static int binarySearch(int[] arr,int low,int high,int n){int mid=(low+high)/2;if(low>high){return -1;}if(arr[mid]==n){return mid;}else if(arr[mid]>n){return binarySearch(arr,low,mid-1,n);}else{return binarySearch(arr,mid+1,high,n);}}

非遞歸實現:

總結:第一次寫low+high/2的地方沒有加括號,結果導致數組索引越界:3,正確的寫法(low+high)/2 

public static int binarySearch(int[] a,int low,int high,int n){while(low<=high){int mid=(low+high)/2;if(a[mid]==n){return mid;}else if(a[mid]>n){high=mid-1;}else{low=mid+1;}}return -1; }

  

?

轉載于:https://www.cnblogs.com/huiandong/p/10983205.html

總結

以上是生活随笔為你收集整理的二分查找递归和非递归方法分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。