1. 程式人生 > >JAVA遞迴演算法

JAVA遞迴演算法

1.什麼是遞迴演算法

   遞迴演算法就是直接或間接呼叫自己的演算法

2.問題1:一列數的規則如下: 1、1、2、3、5、8、13、21、34 ,求第30位數是多少?使用遞迴實現

複製程式碼
 1 public class FibonacciSequence {
 2     public static void main(String[] args){
 3         System.out.println(Fribonacci(9));
 4 
 5     }
 6     public static int Fribonacci(int n){
 7         if(n<=2)
 8             return
1; 9 else 10 return Fribonacci(n-1)+Fribonacci(n-2); 11 12 } 13 }
複製程式碼

3.問題2:漢諾塔問題

漢諾塔(又稱河內塔)問題其實是印度的一個古老的傳說。

開天闢地的神勃拉瑪(和中國的盤古差不多的神吧)在一個廟裡留下了三根金剛石的棒,第一根上面套著64個圓的金片,最大的一個在底下,其餘一個比一 個小,依次疊上去,廟裡的眾僧不倦地把它們一個個地從這根棒搬到另一根棒上,規定可利用中間的一根棒作為幫助,但每次只能搬一個,而且大的不能放在小的上 面。計算結果非常恐怖(移動圓片的次數)18446744073709551615,眾僧們即便是耗盡畢生精力也不可能完成金片的移動了。

要求:輸入一個正整數n,表示有n個碟片在第一根柱子上。輸出操作序列,格式為“移動 t從 x 到 y”。每個操作一行,表示把x柱子上的編號為t的碟片挪到柱子y上。柱子編號為A,B,C,你要用最少的操作把所有的盤子從A柱子上轉移到C柱子上。

複製程式碼
 1 public class Hanio {
 2     public static void main(String[] args){
 3         int i=3;
 4         char a ='A',b='B',c='C';
 5         hanio(i,a,b,c);
 6     }
 7     public static
void hanio(int n,char a,char b,char c){ 8 if(n==1) 9 System.out.println("移動"+n+"號盤子從"+a+"到"+c); 10 else{ 11 hanio(n-1,a,c,b);//把上面n-1個盤子從a藉助b搬到c 12 System.out.println("移動"+n+"號盤子從"+a+"到"+c);//緊接著直接把n搬動c 13 hanio(n-1,b,a,c);//再把b上的n-1個盤子藉助a搬到c 14 } 15 } 16 }
複製程式碼

相關推薦

基礎&演算法|Java演算法練習

Java遞迴演算法練習 使用java實現幾個比較簡單的遞歸面試題 寫遞迴演算法的時候,可以類比數學歸納法。 將每步先簡化 單向連結串列與遞迴演算法 實現單向連結串列 Node.java /** * @ClassName Node * @Descripti

java演算法求n的階乘(n>1,n是正整數)

/** * 遞迴演算法計算n的階乘 * 遞迴:自己調自己 * @param n * @return */ public static Integer jieCheng(Integer n) {

JAVA演算法

1.什麼是遞迴演算法   遞迴演算法就是直接或間接呼叫自己的演算法2.問題1:一列數的規則如下: 1、1、2、3、5、8、13、21、34 ,求第30位數是多少?使用遞迴實現 1 public class FibonacciSequence { 2 public static void main(S

java基礎(4)Java演算法

一、遞迴演算法的概念   在一個方法的方法體內,呼叫該方法本身,稱為遞迴 遞迴:包含了一種隱式的迴圈,會重複執行某段程式碼,但是這種重複不需要使用迴圈語句,不會看到for、while、do……while語句 二、思考    遞迴 實現: 求一個數的階乘     使用遞

Java 演算法 求和 查詢動態選單

public class Test { private int sum=0,num=1; public int calSum(int maxnum){ if(num<=maxnum){ sum+=n

java演算法示例,單引數,多引數

這兩天公司來了個新同事,順便帶一下,給他解釋下遞迴。 要點:找出口,出口即呼叫自己直到不能呼叫為止,不能呼叫即自身方法已經return到具體值。 例: package test; public class Test1 { /** * 題目:1-n相加 * @p

快速排序的非演算法JAVA,使用棧來模擬

使用棧來模擬遞迴,消去qSort中的尾遞迴 public class stackQSort { private static int Partition(int[] arr, int start, int end) { //arr[start]為挖的第一個坑 int key =

Java利用演算法實現24點遊戲

24點遊戲 經典的紙牌益智遊戲,常見遊戲規則:         從撲克中每次取出4張牌。使用加減乘除,第一個能得出24者為贏。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求程式設計解決24點遊戲。         基本要求: 隨機生成4個代表撲克牌牌面

Java中常見的演算法

.常見遞迴演算法 (1)最常見的就是階乘,比如求5的階乘,數學公式就是:5*4*3*2*1,程式碼: package suanfa; public class Digui {     public static int digui(int n){         i

Java篇:WeChat 模仿微信紅包的核心演算法

模仿WeChat的拼手氣紅包 ,例如:10000元傳送50個包。 這50個紅包隨機分配,但是最後相加等於10000. 採用隨機數,隨機紅包金額。 又制定規則,不斷地遞迴運算。 限制最小的紅包金額,例如:0.01,因為考慮人性化,最小的紅包不能是0. 不限制可發出的紅

java漢諾塔演算法

相傳在古印度聖廟中,有一種被稱為漢諾塔(Hanoi)的遊戲。該遊戲是在一塊銅板裝置上,有三根杆(編號A、B、C),在A杆自下而上、由大到小按順序放置64個金盤(如下圖)。遊戲的目標:把A杆上的金盤全部移到B杆上,並仍保持原有順序疊好。操作規則:每次只能移動一個盤

Fibonacci序列演算法推(Java

Fibonacci遞推公式: f(1) = f(2) = 1;f(n) = f(n-1)+f(n-2)(n>2).在這裡取他除以10007的餘數 遞迴 public class Fibonacci { static int digui(int n) {

Java十進位制轉二進位制,演算法

用遞迴演算法求一個int的二進位制字串; 思路是:遞迴最簡單情況(遞迴出口)是0和1;其餘的是先呼叫遞迴算出n/2的二進位制字串,然後加上n時的位數(n % 2)。 import java.util

有關演算法的面試題java實現

什麼叫遞迴? 遞迴是方法(函式)呼叫方法本身的一種程式設計技巧; 使用遞迴需要滿足2個條件:     1)有反覆執行的過程(呼叫自身)     2)有跳出反覆執行過程的條件(遞迴出口) 遞迴演算法的應

Java演算法 演算法計算階乘

程式碼: package com.xu.main; import java.util.Scanner; public class P9 { static long fact(int n) {

Java演算法

遞迴演算法設計的基本思想是:對於一個複雜的問題,把原問題分解為若干個相對簡單類同的子問題,繼續下去直到子問題簡單到能夠直接求解,也就是說到了遞推的出口,這樣原問題就有遞推得解。 關鍵要抓住的是: (1)遞迴出口 (2)地推逐步向出口逼近 例子: example: 求5的階乘。。          如下:   

警察智力訓練--藍橋杯歷年java真題(java實現eval演算法

匪警請撥110,即使手機欠費也可撥通!    為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!    某批警察叔叔正在進行智力訓練:    1 23 4 5 6 7 8 9 = 110;    請看上邊

java 解決 漢諾塔問題(演算法

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exercise6_37 extends JApplet implements ActionListener

JAVA 複習氣泡排序 , 演算法

使用氣泡排序,首先我們要知道,外層n-1,內層n-i-1,外層是表示迴圈的次數,內層表示迴圈比較,比較的方式是用賦值的方式進行比較的,用我們比較通俗的話來說,兩兩相比,大者後移。氣泡排序和遞迴是基本演算

演算法 Java實現

緣起於網易的一道演算法筆試題,之前對遞迴演算法有一個初步印象。感覺遞迴好像就是一種迭代的過程。將原問題不斷分解為若干個與原問題類似更小的問題,直到小問題已知,也就是找到了遞迴演算法的出口,此時,再講問題迴帶得到解的結果。廢話不多說,先上題。 題目是這樣的:有一隻猴子第一天摘