程序员的数学 学习(递归)

汉诺塔问题 递归
https://blog.csdn.net/bohu83/article/details/95112515
递归代码

 public static int sum(int n)
    {

        if(n==0)
        {
            return 0;
        }
        else if(n==1)
        {
            return 1;
        }else
            {
                return  sum(n-1)+n;
            }
    }

    public static void main(String[] args) {
        System.out.println(sum(100));
    }

汉诺塔问题

package cn.yccj.basics;

public class HannuoiTest {
 
	static int i=0;
	
	public static void hannuoi(int n,String a, String b,String c){
		if(n==0){
			
		}else{
			hannuoi(n-1,a,c,b);
			System.out.println(a+"->"+b);
			hannuoi(n-1,c,b,a);
			i++;
		}		
	}
	
	
	public static void main(String[] args) {
		hannuoi(6,"A","B","C");
		System.out.println(i);
	}
 
}

阶乘

package cn.yccj.basics;

import java.util.Scanner;

public class Diguijiecheng {
    public static void main(String[] args) {
        Diguijiecheng sc = new Diguijiecheng();
        System.out.println("请输入一个正整数");
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        System.out.println(sc.jie(n));//调用递归的方法,输出数值
    }

    int jie(int n) {
        if (n == 1 || n == 0) {//终止条件
            return 1;
        } else {
            int sum;
            sum = n * jie(n - 1);//相同重复逻辑
            return sum;
        }
    }
}
 

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,又名黄金分割数列、兔子数列
递推公式为F(n)=F(n-1)+F(n-2),n≥3,F(1)=1,F(2)=1。

https://baike.sogou.com/v267267.htm?fromTitle=%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97

打印方式(一)
递归循环调用函数打印F(n)=F(n-1)+F(n-2)

package cn.yccj.basics;

public class Fblq
{
    //建立一个函数,用于计算数列中的每一项
    public static int fib(int num) {
        //判断:是否是第一个数和第二个数
        if(num == 1 || num == 2) {
            return 1;
        }else {
            //循环调用本函数
            return fib(num - 2) + fib(num - 1);
        }
    }

    //主函数(程序入口)
    public static void main(String[] args) {

        //建立一个for循环,用于打印第一个至第十个数字
        for(int i = 1;i <= 10;i++) {
            //调用函数进行打印
            System.out.print(fib(i) + "\t");
        }
    }
}

打印方式(二)

package cn.yccj.basics;

public class PrintFib {

	public static void main(String[] args) {

		//建立一个长度为10的数组用于存放数列中的数
		int[] arr = new int[10];
		//先定义数列中的第一个和第二个数
		arr[0] = 1;
		arr[1] = 1;
		//建立一个for循环,打印数组中的元素
		for (int i = 0; i < arr.length; i++) {
			//判断:当打印第三个数前,给第三个数赋值
			if (i > 1) {
				arr[i] = arr[i - 2] + arr[i - 1];
			}
			System.out.print(arr[i] + "\t");
		}

	}

}

奉上b站斐波那契视频
https://www.bilibili.com/video/av27168106/

你可能感兴趣的:(程序与数学)