递归(recursion):程序调用自身的编程技巧
递归有两个基本要素:
(1) 边界条件:确定递归到何时终止,也称为递归出口。
(2) 递归模式:大问题是如何分解为小问题的,也称为递归体。
例1:
递归实现阶乘,阶乘是最适合用来使用递归的问题之一
Python实现:
def recursion(n) :
if n == 1 :
return 1 #递归结束
return n * recursion(n - 1) #问题规模减1,递归调用
print ( recursion(10))
Java实现:
import java.util.Scanner;
public class Recursion {
public static int Factorial(int n) {
if (n == 1 || n == 0) {
return 1;
} else
return n * Factorial(n - 1);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println(Factorial(n));
}
}
例2:递归实现汉诺塔问题(之前也写过)
def hanoi(n,A,B,C):
if n==1:
print(A,'移动到',B)
else:
hanoi(n-1,A,C,B)
print(A,'移动到',B)
hanoi(n-1,C,B,A)
hanoi(6,'X','Y','Z')
例3:字符串全排列问题
COUNT=0
def array(n,begin,end):
global COUNT
if begin>=end:
print (n)
COUNT +=1
else:
i=begin
for num in range(begin,end):
n[num],n[i]=n[i],n[num]
array(n,begin+1,end)
n[num],n[i]=n[i],n[num]
n=['a','b','c']
array(n,0,len(n))
print (COUNT )