首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

递归算法:计算1+2+3+……+n的值

public class Main { public static int test(int n){ int temp = 0 ; if (n-1>0){...temp = n + test(n-1); }else { temp = n; } return temp; }...很多人只知道递归是自己调用自己,却并不明白自己调用自己的变量作用域的关系,其实每一次调用自己它的变量都是独立的,是互不影响的,如果你实在理解不了,就把这所有递归的次数,每一次调用都当成不是在调用自己,而是另一个独立的方法...比如我们可以把上面的test()方法,写成10个test()方法,用1,2,3……10来区分,然后将上面的代码写成一个循环,没一次循环调用不同的方法,执行相同的逻辑,能得到相同的结果,这样有助于自己对递归的理解...你只需要把每一次递归都当成调用了一次方法,这个方法得到了一个返回结果,这个结果接着又调用了一个跟自己一样逻辑的方法,继续参与了运算,如果反复往返罢了!

2.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    O(1)时间检测2的幂次除以2统计1的位数n和n-1取且

    统计1的位数 这个也容易想到,如果是2的幂次的话肯定是正的,然后去统计1的个数,需要移位和取且操作,和上面的方法差不多。因为除2本来就可以通过移位操作完成。...// write your code here } n和n-1取且 这个是以前检测有多少个1的时候用到的一种方法,那个时候有一个结论:n&n-1可以减少一位1,如果用这种方法,那代码是相当简单:...(n&(n-1)); // write your code here } 还有复习一下计算机中数字的表达形式: 有符号数最高位做符号位,0为正,1为负。...n位有符号数的表示范围: -2^n-- 2^(n-1)-1 原码的表示:     左边是符号位,正数为0,负数为1。...再如,将3点的时针调慢一个小时,即调成2点,和将时针向前调整11个小时的效果是一样的。因此用3-1和(3+11)mod(12)的结果一样。补码在机器码中的运用主要是用加法元算代替减法运算。

    59530

    算法-1到n中所有和为m的组合

    题目: 输入两个整数 n 和 m,从数列1,2,3…….n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。...解题思路: 好未来笔试题中的一道题目,是背包问题的一个衍生问题,设i是1,2,3…….n 中的一个数,那么从i=1开始,(n,m,i)的问题就可以变成(n,m-i,i+1)的子问题,依次递归下去,这样会有两个结果...举个例子,假设n=3,m=4,i的初始值为1,组合结果为v: 调用函数:(3,4,1) v[1] 第一层递归:(3,3,2) v...[1,2] 第二层递归:(3,1,3) i>m 退回到第一层 第一层递归:(3,3,3) v[1,3] 第二层递归:(3,0,4...直到在第0层的时候,i>n,即 v[3]的情况,所有的递归就都结束了。

    1.9K50

    力扣题(2的幂)——学习到JAVA按位与“&”在“n&(n-1)”中的使用

    如上图,求一个数是不是2的幂,一行代码解决。 那么,(n & (n-1)) == 0是什么意思呢 java中“&”表示按位与操作,他把左右变为二进制然后按位取与。...“n=n&(n-1)”的意思就是 去掉“n的二进制”的最后一个1. 如果A&B==0,表示A与B的二进制形式没有在同一个位置都为1的时候。 这句话到底啥意思??不妨先看下n-1是什么意思。...n&(n-1)=1101010000 由此可以得出,n和n-1的低位不一样,直到有个转折点,就是借位的那个点,从这个点开始的高位,n和n-1都一样,如果高位一样这就造成一个问题,就是n和n-1在相同的位上可能会有同一个...1,从而使((n & (n-1)) !...= 0),如果想要 ((n & (n-1)) == 0),则高位必须全为0,这样就没有相同的1。 所以n是2的幂或0

    53340

    Java——方法递归及其应用场景(求1!+2!+3!+......n!,斐波那契数列)

    递归作为一种算法在程序设计语言中广泛应用,递归的算法至于要少量的程序就可以描述初解题过程中的复杂多次的运算,大大减少了代码量。...递归的能力在于用有限的语句来定义对象的无限集合,一般来说,递归是需要边界的,否则会一直递归计算下去,当边界条件满足时,递归返回。 下面我们用几个例子深入理解以下递归 1、 求1!+2!+3!+…n!...我们熟悉的非递归方法如下 以上方法利调用方法,达到目的,而这种方法在书写上有些繁杂,为了简便,我们有了以下的递归方法 递归方法的执行过程如下 2、斐波那契数列 斐波那契数列是1...,1,2,3,5,8,13,21,34… 也成为黄金分割数列,兔子数列 以下为递归方法 但这种方法执行的时候会遇到运行速度上的问题,在运行到Num(40)的时候运行会很慢,那我们可以再试一试非递归的方法...下面是斐波那契数列的非递归方法 这种循环求斐波那契数列的方法有效的提高了运行速度,解决了以上递归时遇到的问题。

    42420

    AMD中国裁员落地:规模较小,补偿N+1+2!官方回应:小幅优化和重组

    上周,某职场社交平台上有网友爆料称,AMD将开始在中国进行裁员,裁员比例可能为10%-15%,或将涉及300-450名左右的员工,其中RTG部门是重灾区。...10月25日,芯智讯也向AMD中国内部人士了解到,当天确实有一些员工被约谈(裁员),但是裁员的规模并不像之前网上传闻的那么多,而且补偿方案有没有传闻的那么高。...补偿方案是N+1+2。”...最新的消息也显示,目前仅AMD中国的NCG相关人员似乎被约谈比较多,补偿方案是:当日当场签约,补偿N+1+2,社保交到年底;当日当场不签约,补偿N+1+1,社保交到11月底。...不过,受美国最新的半导体管制规则影响,AMD的部分高性能计算产品(例如MI200及更高端产品)的对华出口也将受限。 目前尚不清楚AMD此番裁员是否与美国新出台的新规有关。

    18520

    用go语言,给定两个正整数 n 和 k,有 n 个编号从 0 到 n - 1

    用go语言,给定两个正整数 n 和 k,有 n 个编号从 0 到 n - 1 的孩子排成一队。 最开始,编号为 0 的孩子手中有一个球,并向右传递。 每秒,持球的孩子会将球传给旁边的孩子。...答案2025-01-13: chatgpt[1] 题目来自leetcode3178。 大体步骤如下: 1.初始化孩子队列,编号为0到n-1。 2.设立一个变量t,用来记录球传递的位置。...3.计算每秒传递一次球后的位置: • 计算当前传球的位置t,取余数操作k % (n - 1)。...4.执行main函数,给定初始条件n=3,k=5,调用numberOfChild函数计算得到结果。 5.输出结果。...总的时间复杂度为O(1),因为无论n和k的取值如何,算法的执行时间不会随着n和k的增加而增加。 总的额外空间复杂度为O(1),因为除了几个变量外,没有使用额外的数据结构存储数据。

    7310

    2018-09-04Q:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。方法一:递归实现1+2+..+n;

    总结前面大牛们的方法,提供java的两种阶梯思路: 共同点:一,利用利用短路 && 来实现 if的功能;二,利用递归来实现循环while的功能 不同点:方法一:递归实现1+2+.....+n;方法二:n(n+1)/2,递归实现n(n+1);方法三,利用Math实现n(n+1) 关于如何递归实现a*b,有大佬总结过,我搬下来:利用位运算来做,快速幂,快速模乘, 原理是把a拆成2的幂的和,...= (b 1) + .... 接下来看代码: 方法一:递归实现1+2+.....int Sum_Solution1(int n) { return (int) (Math.pow(n, 2) + n) >> 1; } 方法二:n(n+1)/2,递归实现n(...n+1); 先参考使用while的例子,再转换 原理是把a拆成2的幂的和,a = 2^e0 + 2^e1 + 2^e2....

    88920

    LeetCode-面试题53-2-0到n-1中缺失的数字

    # LeetCode-面试题53-2-0到n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。...示例1: 输入: [0,1,3] 输出: 2 示例2: 输入: [0,1,2,3,4,5,6,7,9] 输出: 8 限制: 1 <= 数组长度 <= 10000 # 解题思路 方法1、二分查找: 递增且数字范围在...即可 时间复杂度O(logN),空间复杂度O(1) 方法2、异或运算: 异或运算,可以使得相同的数字异或为0,如b^b=0,a^b^b=a 由于数组有序且递增,除了缺失数字外,每一位元素和索引进行异或均为...因为元素和下标是相等的,异或为0,所以缺失的数字一定会在异或2次操作后剩下,因为缺失的数字和下标是不等的 最后再将res异或上数组下标n也就是此时i的值(因为此时,数组已经异或了n个,而下标只异或了n-...方法、异或运算: 数组无序的情况依旧可以使用异或运算进行处理 先初始化r=0,将r与数组所有值异或一次,之后将r和数组i+1异或一次(因为下标从1开始,但循环从0开始),由于补全之后,数组的长度是n,当前的数组长度为

    53620

    给你一个 n 个节点的无向无根树,节点编号从 0 到 n - 1 给你整数 n 和一个长度为

    给你一个 n 个节点的无向无根树,节点编号从 0 到 n - 1 给你整数 n 和一个长度为 n - 1 的二维整数数组 edges , 其中 edges[i] = [ai, bi] 表示树中节点 ai...答案2023-09-03: 代码思路: 1.创建图结构和入度数组,并初始化空图和入度数组。 2.遍历边数组,将边的两个节点加入图中,同时更新入度数组。...3.创建队列,并将所有入度为1且节点上金币为0的节点加入队列。 4.使用BFS算法遍历队列,将入度-1并将入度为1且节点上金币为0的相邻节点加入队列。...5.继续遍历队列,将入度-1并记录节点的排名,并将入度为1的相邻节点加入队列。 6.计算满足条件的边数,即排名大于等于2的边。 7.返回计数值作为最少经过的边数。...总的时间复杂度:O(n),其中n为节点数量,需要遍历边数组和节点数组,同时进行BFS操作。 总的额外空间复杂度:O(n),需要创建图结构、入度数组和队列。

    20250
    领券