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

C,递归函数中特定列的奇数元素之和

基础概念

递归函数是一种在函数内部调用自身的函数。递归函数通常用于解决可以分解为相同问题的子问题的情况。递归函数需要有一个终止条件,以避免无限递归。

相关优势

  1. 简洁性:递归函数通常比迭代方法更简洁,代码更易读。
  2. 自然性:对于某些问题,递归解决方案更自然,更容易理解和实现。

类型

递归函数可以分为两种主要类型:

  1. 直接递归:函数直接调用自身。
  2. 间接递归:函数通过其他函数间接调用自身。

应用场景

递归函数广泛应用于各种场景,例如:

  • 树和图的遍历
  • 分治算法(如快速排序、归并排序)
  • 动态规划问题
  • 数学计算(如阶乘、斐波那契数列)

示例问题:递归函数中特定列的奇数元素之和

假设我们有一个二维数组,我们需要计算某一列中所有奇数元素的和。

代码示例

代码语言:txt
复制
def sum_odd_elements(matrix, col):
    if not matrix:
        return 0
    if matrix[0][col] % 2 != 0:
        return matrix[0][col] + sum_odd_elements(matrix[1:], col)
    else:
        return sum_odd_elements(matrix[1:], col)

# 示例矩阵
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 计算第二列(索引为1)的奇数元素之和
result = sum_odd_elements(matrix, 1)
print(result)  # 输出: 5

解释

  1. 终止条件:当矩阵为空时,返回0。
  2. 递归调用:检查当前行的指定列元素是否为奇数。如果是奇数,则将其加到结果中,并递归调用剩余的矩阵。如果不是奇数,则直接递归调用剩余的矩阵。

可能遇到的问题及解决方法

  1. 栈溢出:递归深度过大可能导致栈溢出。可以通过优化递归算法或使用尾递归优化(某些语言支持)来解决。
  2. 性能问题:递归函数可能会导致性能问题,特别是当递归深度较大时。可以通过使用迭代方法或记忆化递归来优化性能。

参考链接

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《算法竞赛进阶指南》0x05 排序

排序基本概念 程序设计中,常用排序共分为三类: 选择排序、插入排序、冒泡排序 堆排序、归并排序、快速排序 计数排序、基数排序、桶排序 前两类是 基于比较的排序算法 对 n 的元素排序时,若元素比较大小的时间复杂度为...Vani 预先联系了七夕祭的负责人 zhq,希望能够通过恰当地布置会场,使得各行中 cl 感兴趣的摊点数一样多,并且各列中 cl 感兴趣的摊点数也一样多。...序列中从小到大排名为 \lfloor M / 2 \rfloor + 1 \sim M 的整数存储在小根堆中 任何时候,如果某一个堆中元素个数过多,打破这一性质,就取出该堆堆顶元素放入另一个堆 这样一来...,可以转化为归并排序求逆序对来解决 奇数码游戏两个局面可达,当且仅当两个局面下网格中的数依次写成 1 行 n^2 - 1 个元素序列后,逆序对个数的奇偶性相同 充分性简单证明:奇数码游戏两个局面可达...,找了一圈,没有一个人解释的明白,自己能力也不够,故略 综上,奇数码的任意操作,都不会改变奇数码元素序列的逆序对个数 因此,如果初始奇数码序列逆序对为偶数,则无论怎么操作,都不能变成奇数对逆序对 偶数码游戏两个局面可达

80940

力扣416——分割等和子集

是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。...注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]....我们的目标是为了让选出来的数字之和等于所有数字之和的一半。...这和0-1 背包问题很类似,我们可以利用二维表格 dp 解决,表格有len行、target+1列,这里len表示当前数字所处的数组下标,target表示所有数字之和(最大值为:所有数字之和的一半),target...深度优先搜索 和动态规划类似,只是换成了递归的写法。 针对一个数字选还是不选的问题,要求选择的数字之和达到一半,等价于不选择的数字之和也达到了一半。

49320
  • 【趣学C语言和数据结构100例】11-15

    【趣学C语言和数据结构100例】问题描述11.求一个 3x3 的整型矩阵对角线元素之和。(扩展)输入 n,求一个 nxn 的整型矩阵对角线元素之和。...所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。要求输出 1~n² 的自然数构成的魔方阵。...对于 nxn 的整型矩阵,先判断n为奇数还是偶数:n为奇数,对角线元素之和为正对角线+副对角线-a[n/2][n/2]n为偶数,对角线元素之和为正对角线+副对角线12.有序数组进行插入for循环遍历,从后往前...15.魔方阵分析:每一行、每一列和对角线之和均相等。会得到以下规律。(1).将1放在第1行的中间一列。...所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。要求输出 1~n2的自然数构成的魔方阵。//步骤: //1.将1放在第1行的中间一列。

    6610

    大厂面试系列(七):数据结构与算法等

    你这个算法的时间复杂度是多少 数组A,2*n个元素,n个奇数、n个偶数,设计一个算法,使得数组奇数下标位置放置的都是奇数,偶数下标位置放置的都是偶数 •先说下你的思路 •下一个奇数?怎么找?...不用类库函数,对这两个数组排序。 给定一个数组,求该数组所有的自子数组 去掉一个字符串中的所有空格 给定一个数组,元素的大小0~25,有重复元素。...二叉树前中后遍历 二叉树层次遍历 二叉树深度优先遍历(递归、非递归) 二叉树广度优先遍历(递归、非递归) 和为n的二叉树路径 二叉树深度 二叉树是否对称 链表反转 红黑树有啥特性?...多叉树的第n层 层次遍历 2.递归太深会怎样?答栈溢出。为什么会栈溢出?python函数中的临时变量存在哪?那很深的时候,用循环会怎样呢?为什么不会栈溢出?...有N个节点的满二叉树的高度 其他 哈希表,对哈希表的细节要求很高,比如哈希表的冲突检测、哈希函数常用实现、算法复杂度;比如百度二面就让我写一个哈希表插入元素算法,元素类型是任意类型。

    1.2K20

    【趣学C语言和数据结构100例】26-30

    【趣学C语言和数据结构100例】问题描述26.利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来27.给定一个不多于 5 位的正整数,要求: 1. 求它是几位数,2....29.求不超过 n 位数,且由 0-7 所能组成的奇数个数。30.一个偶数总能表示为两个素数之和,即把一个偶数分解成两个素数。...代码分析26.递归的使用分析:之前提到过递归在与定义func,并在func中使用func,和递归的结束条件。相当于一个栈。先进后出。...29.由 0-7 所能组成的奇数个数找规律:1.最后一位为奇数1357 ,4种2.如果n为2位数,则74 7是因为首数字不能为03.如果n为3位数,则78*430.偶数分解成两个素数难点:判断一个数是否是素数写一个函数...所能组成的奇数个数。

    8400

    牛客网剑指offer-3

    如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。...例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子...一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。...分析 将每次遍历过的格子使用字典记录下来,编写一个递归函数,递归判断当前遍历的格子向上下左右四个方向,在递归函数中还需判断各种边界条件 class Solution: def __init__(...threshold, rows, cols, 0, 0) def moving(self, threshold, rows, cols, row, col): # 计算行坐标和列坐标的数位之和是否大于

    93720

    LeetCode 算法题

    target-3=5,5不在哈希表中,key为3,value为1,存入哈希表中;遍历到元素8,与之对应的元素应该是target-8=0,0不在哈希表中,key为8,value为2,存入哈希表中;遍历到元素...2,与之对应的元素应该是target-2=6,6在哈希表中;因此6和2就是我们要找的两个元素,对应的下标分别是0,3,将数组[0,3]返回即可,算法到此结束。...因为每次调用递归都会去掉 l1 或者 l2 的头节点(直到至少有一个链表为空),函数 mergeTwoList 至多只会递归调用每个节点一次。...递归调用 mergeTwoLists 函数时需要消耗栈空间,栈空间的大小取决于递归调用的深度。结束递归调用时 mergeTwoLists 函数最多调用 n+m次,因此空间复杂度为 O(n+m)。...因为每次循环迭代中,l1 和 l2 只有一个元素会被放进合并链表中, 因此 while 循环的次数不会超过两个链表的长度之和。

    32810

    python 面试题-收集100+面试题笔试题

    …100 的值 计算求1+2-3+4-5… …100 的值 2.6计算 1-n 之间的所有 5 的倍数之和 定义一个函数:计算 1-n 之间的所有 5 的倍数之和,默认计算 1-100 ( n 是 一个整数...”, 1] 3.2列表切片 如果有一个列表a=[1,3,5,7,11] 问题:1如何让它反转成[11,7,5,3,1] 2.取到奇数位值的数字,如[1,5,11] 3.3列表大小排序 问题:对列表a 中的数字从小到大排序...若该元素出现多次请返回第一个找到的位置 如 A1=[1, “aa”, 2, “bb”, “val”, 33] 或 A2 = [1, “aa”, 2, “bb”] 3.23列表查找两数之和 给定一个整数数组...但是,数组中同一个元素不能使用两遍。...2.a或b中包含的所有元素 3.a中包含而集合b中不包含的元素 第5章 综合练习题(上机考试) 5.1 有1、2、3、4组成无重复数的三位数(排列组合) 有1、2、3、4数字能组成多少互不相同无重复数的三位数

    7K20

    【愚公系列】软考中级-软件设计师 055-算法设计与分析(分治法和回溯法)

    回溯法通常用于解决在一组可能的解中找出特定解的问题,如八皇后问题和0-1背包问题。...凡是涉及到分组解决的都是分治法(二分查找、归并排序、求阶乘、斐波那契数列等)。 2.案例 2.1 二分查找 二分查找是一种在有序数组中查找特定元素的算法。...它的基本思想是通过将数组分成两部分,判断目标元素在哪一部分中,然后继续在该部分中进行查找,直到找到目标元素或者确定目标元素不存在为止。...其思路不难理解,想象一下你在走一个迷宫,当在一个路口有A, B, C 三条岔路的时候你要怎么办呢?...判断当前位置是否与已放置的皇后冲突,如果冲突则尝试下一列。 如果找到一个合适的位置,则记录当前位置,并递归地继续放置下一行的皇后。

    10810

    【C语言刷题——Leetcode12道题】带你起飞,飞进垃圾堆

    有序数组中出现次数超过25%的元素 1351. 统计有序矩阵中的负数 1903. 字符串中的最大奇数 1979. 找出数组的最大公约数 2089. 找出数组排序后的目标下标 2124....为了方便,可以封装一个函数来进行处理: ==本菜鸟的就是这种做法emm,至于大佬==的我就不知道了 922.按奇偶排序数组 II 给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,...统计有序矩阵中的负数 给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。...字符串中的最大奇数 给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 “” 。...来源:力扣(LeetCode) 找出各位数字之和为 偶数 的正整数即可,封装成一个函数方便操作: 2278.

    91220

    【每周一坑】杨辉三角形

    杨辉三角形,也称帕斯卡三角,其定义为:顶端是 1,视为(row0).第1行(row1)(1&1)两个1,这两个1是由他们上头左右两数之和 (不在三角形内的数视为0).依此类推产生第2行(row2):0+...在给出正确的答案之前,我们先了解一个名词 “幻方” ,百度百科定义:幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。...首先是 N 为奇数时: 将1放在第一行中间一列; 从2开始直到n×n止各数依次按下列规则存放,按 45°方向行走,如向右上,每一个数存放的行比前一个数的行数减1,列数加1 如果行列范围超出矩阵范围,则回绕...按上述奇数阶幻方给分解的4个子方阵对应赋值 上左子阵最小(i),下右子阵次小(i+v),下左子阵最大(i+3v),上右子阵次大(i+2v) 即4个子方阵对应元素相差v,其中v=n*n/4 四个子矩阵由小到大排列方式为...① ③ ④ ② 然后作相应的元素交换:a(i,j)与a(i+k,j)在同一列做对应交换 ,(jn-t),a(t,0)与a(t+k,0);a(t,t)与a(t+k,t)两对元素交换 ,其中k=n//2,

    1.4K40

    这个远古的算法竟然可以!

    表8 半/倍表 第八部分 设置半列的行号第一行是 0,最后一行是 6,可以看到半列值为奇数的行号是 0、 3、4、6。现在,请注意这个关键模式:这些行号恰好是 89 的表达式中的指数。...这不是巧合;我们构造半列的方式意味着这个2的幂之和表达式中的指数,恰好总是奇数值的行号。把这些行对应的倍列值相加,其实就是18乘以2的幂之和,这个幂之和刚好等于89,即18和89。...我们可以把 89 写成二进制即 1011001,在第 0、3、4、6(从右开始 数)位上都有 1,这和半列的奇数行号一样,也和前面等式的指数一样。我们可以将二进制中的1和0解释为 2 的幂之和的系数。...如上所述,半列的第一个值是其中一个乘数: halving = [n1] 下一项是 halving[0]/2,去掉余数。在 Python 中,使用 math.floor()函数 实现。...由于对齐并打包在一起,所以引用任意一行将返回完整的行,包括半列和倍列的元素,比如表5的第三行,是22和72。对这些行进行引用和处理,删掉不想要的行,将表5转换为表6。

    1.6K30

    前端应该如何准备数据结构和算法?

    调整数组顺序使奇数位于偶数前面 和为S的两个数字 和为S的连续正整数序列 5.5.2 N数之和问题 非常常见的问题,基本上都是一个套路,主要考虑如何比暴利法降低时间复杂度,而且也会用到上面的双指针技巧...键转换为地址是通过一种关系(公式)来完成的,这就是哈希(散列)函数。 虽然哈希表是一种有效的搜索技术,但是它还有些缺点。两个不同的关键字,由于哈希函数值相同,因而被映射到同一表位置上。该现象称为冲突。...两数之和 三数之和 字符流中第一个不重复的字符 宝石与石头 5.8 数据结构-堆 ?...它描述了在有序集合中搜索特定值的过程。 ?...二维数组查找 旋转数组的最小数字 在排序数组中查找数字 x 的平方根 猜数字大小 6.3 递归 递归是一种解决问题的有效方法,在递归过程中,函数将自身作为子例程调用。 ?

    80810

    一文梳理面试中的数据结构与算法

    调整数组顺序使奇数位于偶数前面 和为S的两个数字 和为S的连续正整数序列 5.5.2 N数之和问题 非常常见的问题,基本上都是一个套路,主要考虑如何比暴利法降低时间复杂度,而且也会用到上面的双指针技巧...键转换为地址是通过一种关系(公式)来完成的,这就是哈希(散列)函数。 虽然哈希表是一种有效的搜索技术,但是它还有些缺点。两个不同的关键字,由于哈希函数值相同,因而被映射到同一表位置上。该现象称为冲突。...两数之和 三数之和 字符流中第一个不重复的字符 宝石与石头 5.8 数据结构-堆 ?...它描述了在有序集合中搜索特定值的过程。 ?...二维数组查找 旋转数组的最小数字 在排序数组中查找数字 x 的平方根 猜数字大小 6.3 递归 递归是一种解决问题的有效方法,在递归过程中,函数将自身作为子例程调用。 ?

    74820

    前端应该如何准备数据结构和算法?

    调整数组顺序使奇数位于偶数前面 和为S的两个数字 和为S的连续正整数序列 5.5.2 N数之和问题 非常常见的问题,基本上都是一个套路,主要考虑如何比暴利法降低时间复杂度,而且也会用到上面的双指针技巧...键转换为地址是通过一种关系(公式)来完成的,这就是哈希(散列)函数。 虽然哈希表是一种有效的搜索技术,但是它还有些缺点。两个不同的关键字,由于哈希函数值相同,因而被映射到同一表位置上。该现象称为冲突。...两数之和 三数之和 字符流中第一个不重复的字符 宝石与石头 5.8 数据结构-堆 ?...它描述了在有序集合中搜索特定值的过程。 ?...二维数组查找 旋转数组的最小数字 在排序数组中查找数字 x 的平方根 猜数字大小 6.3 递归 递归是一种解决问题的有效方法,在递归过程中,函数将自身作为子例程调用。 ?

    98530

    python条件判断与循环

    Python的循环有两种,一种是for...in循环,依次把list或者tuple中的每个元素迭代出来,看例子 names=[] i names:     (i) jack lucy tom 所以for...x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句。...造数函数range(),使用方法range(开始数字,结束数字,中间跨度)    ,0开始,n-1结束 3.x版本已经将range()生成迭代器,不在输出结果, ?...案列,计算100之和 sum=i ():     sum=sum+i (sum) 第二种循环 while循环,只要条件满足,循环就不会中断,条件不满足时退出循环。...比如我们要计算100以内所有奇数之和,用while循环 sum=n=n>:     sum=sum+n     n=n-(sum) 中断当前循环break,演示 sum=n=n>:     sum=sum

    1.1K30

    前端应该如何准备数据结构和算法?

    调整数组顺序使奇数位于偶数前面 和为S的两个数字 和为S的连续正整数序列 5.5.2 N数之和问题 非常常见的问题,基本上都是一个套路,主要考虑如何比暴利法降低时间复杂度,而且也会用到上面的双指针技巧...键转换为地址是通过一种关系(公式)来完成的,这就是哈希(散列)函数。 虽然哈希表是一种有效的搜索技术,但是它还有些缺点。两个不同的关键字,由于哈希函数值相同,因而被映射到同一表位置上。该现象称为冲突。...两数之和 三数之和 字符流中第一个不重复的字符 宝石与石头 5.8 数据结构-堆 ?...它描述了在有序集合中搜索特定值的过程。 ?...二维数组查找 旋转数组的最小数字 在排序数组中查找数字 x 的平方根 猜数字大小 6.3 递归 递归是一种解决问题的有效方法,在递归过程中,函数将自身作为子例程调用。 ?

    61920

    【python】之哥德巴赫猜想(递归法)和教室排课(枚举法)

    枚举 将所有可能的情况一一列举出来筛选出满足条件的。...哥德巴赫猜想 众所周知,哥德巴赫猜想被称作数字王冠上的明珠--每个不小于6的偶数都是两个奇素数之和,你被要求编写一个程序来验证1000以内的情况。...素数,指的是“大于1的整数中,只能被1和这个数本身整除的数”)的函数,在创建一个验证猜想的函数,因为是要把一个大于6小于1000的偶数分为两个奇素数,所以传三个值过去,a要小于那个大于6小于1000的偶数...,b要大于0,在用判断素数函数来判断a,b是否为素数,如果是则输出那个小于那个大于6小于1000的偶数等于a加b表达式如果素数条件不满足则用递归,将a加2,b加2,因为a和b的起始值为奇数那么加上一个偶数还是奇数...,2是最小的偶数,接着执行验证猜想函数直到找到为止。

    1.5K30
    领券