数学不单单培养的是我们解题的公式,更重要的是对于一个问题的解题思路以及对一个问题的逻辑思路的培养,而对于编写一个程序解决实际问题的主要过程个人认为就是方法和逻辑思路的确立,如何将一个问题解决。学习数学更主要的是培养我们个人的解题思路。如何宏观的去看待问题的总领,亦或者是从一个方面去问题中单独的个体去解决问题这都是一个思维方法的培养。
举个简单例子:汉诺塔问题
汉诺塔
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
——摘自百度百科
package work;
import java.util.Scanner;
public class Hanoi {
static int i = 1;
public static void main(String[] args){
int n = 0;
char a = 'A';
char b = 'B';
char c = 'C';
System.out.println("铜片数");
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
hanNoi(n,'A','B','C');
}
public static void move(int n, char origin, char target){
System.out.println("第"+i+"步,将"+n+"号铜片从"+origin+"——>"+target);
i++;
// 操作步骤
}
public static void hanNoi(int n,char origin, char process, char target){
if(n == 1){
move(1,origin,target);//只剩下一个盘子的时候,直接到目标
return;
}
hanNoi(n-1,origin,target,process);//先把n-1个盘子从起始移动到过程上面
move(n,origin,target);//然后把第n个盘子从起始移到目标
hanNoi(n-1,process,origin,target);//最后把n-1个盘子从过程移动到目标
}
}
我们就很可以从这个问题的分化入手,经过拆分和一步一步的化简将问题简化到最用以理解和最原始的操作这就是递归。这个方法的难点并不是代码的复杂度而是一个思维运转方式。由一个问题就可看出思维方式的重要性。类似问题有很多例如青蛙跳,斐波那锲数列,等等都是基本的问题但都是体现了一个思维问题。解决程序问题就如同完成数学解题一样,方法思路是解题的根本。
总而言之在学习的过程中不单单要学习java知识,更重要的是一个思路的培养。
小白的个人见解请大佬们指教!