递归的一些见解

博客主要探讨递归思想,阐述了递归思想的使用条件,还介绍了如何编写递归函数,可从递归条件角度思考。同时提到一个规模为n的问题可分解为规模较小且解决方式相同的问题。最后给出汉诺塔问题等简单实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	递归是一种重要的编程思想,作用,特点,啥的我就不说了(没记住+不想码字?),这里我给出自己关于的一些见解以及运用递归思想简单实例。

一 递归思想的使用条件是什么?
递归思想要想在实际中去使用,必须满足以下条件

1	一个规模为n的问题可以分解为规模较小的问题(n-1或者n-i)的问题,并且较小规模的问题应该与规模为n的问题的解决方式相同。
2	当递归使问题规模下降到某个基本问题(如n=1,具体问题具体分析)时,应该给出该答案或者该答案应该容易求解。

二 递归函数应该如何撸出来呢?
我认为要撸出递归函数的代码,可以从能够运用递归思想解决的实例满足的递归条件角度思考。

1	形参。一般情况下都会给出问题规模这个参数,其他参数视情况而定
2   函数体。函数体内的主体结构是对问题规模n的处理的划分,就像数学中的分类讨论。需要给出两个讨论,一个为基本问题(如n=1)的处理办法,一个为非基本问题的处理办法

那非基本问题有很多可能(如n=2,3,i,n)为什么可以统一处理呢?这就是我上面提到的递归思想使用的条件中给出的这句话了 *一个规模为n的问题可以分解为规模较小的问题(n-1或者n-i)的问题,并且较小规模的问题应该与规模为n的问题的解决方式相同。

下面给出几个简单实例。

package recusion;

import java.util.Scanner;

public class n {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		System.out.println(function(num));

	}

	public static int function(int n) {// 函数作用:对给定的n求其阶乘。可以理解为一个规模为n的问题

		if (n > 1) { // 给出了该问题当其规模n>1的情况下的转化为更小问题的解决方案,即转化为n*function(n-1)
			return n * function(n - 1);
		} else
			return 1; // 给出了基本问题当n=1时的答案。
	}
}

汉诺塔问题

package recusion;

import java.util.Scanner;

public class hanio {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		hanio('A','B','C',num);
	}
	
	public static void hanio(char a,char b,char c,int num){		//三个变量a,b,c表示把a中盘子通过b移到c,num是作为规模n的输入
		
		if(num>1){				//给出规模大于1基本问题的求解
			hanio(a,c,b,num-1);
			System.out.println(a+"->"+c); 
			hanio(b,a,c,num-1);
		}
		else						//给出了基本问题n=1的求解
			System.out.println(a+"->"+c);
		
	}
}

再补充先扔了再说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值