角谷定理的递归实现

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了角谷定理的递归实现相关的知识,希望对你有一定的参考价值。

角谷定理

输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。
经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1

  • java代码实现
public class Kaku{
    static int s = 0;
    public static void main(String [] args){
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个大于0的整数:");
        int n = input.nextInt();
        kaku(n);
        System.out.println('\\n'+"经过"+s+"次运算得到自然数1");
    }
    public static void kaku(int n){
        if(n == 1){
            System.out.print(n +" ");
        }
        else if( n%2 == 0){
            System.out.print(n+" ");
            kaku(n/2);
            s++;
        }
        else{
            System.out.print(n + " ");
            kaku(n*3+1);
            s++;
        }
    }
}

kaku(n/2); //n为偶数,除以2(n 不为 1)
kaku(n*3+1); //n为奇数,乘3加一(n 不为 1)
if(n == 1) System.out.print(n +" "); n为1时,不在调用递归函数,结束递归
static int s = 0; 类变量用于统计递归函数调用的次数

以上是关于角谷定理的递归实现的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript - 代码片段,Snippets,Gist

掌握递归关系时间复杂度的定理

主定理和递归

(C++)一行代码递归实现辗转相除法

ZZNUOJ_C语言1099:角谷猜想(多实例测试)(完整代码)

角谷猜想