递归系列2(翻转)

编写一个函数reverse_string(char * string)(递归实现)

实现:将参数字符串中的字符反向排列。

要求:不能使用C函数库中的字符串操作函数。

<span style="font-size:24px;">#include<stdio.h>
void reverse_string(char * string)
{
    if(*string != '\0')
    {
        reverse_string(string+1);
        printf("%c",*string);
    }
    else
        return;
}
int main()
{
    char *p = "abcdef";
    reverse_string(p);
    printf("\n");
    return 0;
}

把12345翻转成54321

#include<stdio.h>
void print(int n)
{
    if(n != 0)
    {
        printf("%d",n%10);
        print(n/10);
    }
}
int main()
{
    int a = 12345;
    print(a);
    printf("\n");
    return 0;
}
时间: 2024-10-11 13:26:29

递归系列2(翻转)的相关文章

递归实现字符串翻转

编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数. 非递归实现 void reverse(char *str) { char *left = str; char *right = str + strlen(str) - 1; while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--

递归系列

编写一个函数实现n^k,使用递归实现 #include<stdio.h> int for_fun(int n,int k) { int ret = 1; while(k) { ret *= n; k--; } return ret; }//非递归 int ret_fun(int n,int k) { int ret = 0; if(0 == k) return 1; else { k--; ret = n * ret_fun(n,k); return ret; } }//递归 int main

reverse_string(char *string)递归实现字符串翻转

函数实现之前 先看一个例子 void fun(int i) { if (i > 0) fun(i / 2); printf("%d ",i); } int main(void) { fun(10); return 0; } 输出结果是什么? 这是<c语言深度剖析>中的一个例子  在这个例子中 printf("%d ",i):语句是fun函数的一部分 必定执行一次fun函数,就要打印一次.函数展开过程如下: void fun(int i) { //f

leadcode的Hot100系列--226. 翻转二叉树

这玩意儿基本上还是遍历的那一套, 这里使用先序遍历的方式,直接对左右子树进行对调即可. (虽然看题目的时候,感觉都一样,但真正写出来之后,印象还是深刻了很多) struct TreeNode* invertTree(struct TreeNode* root){ struct TreeNode *pTemp = NULL; if (NULL == root) return NULL; pTemp = root->left; root->left = root->right; root-&

翻转二叉树(递归与非递归)

翻转一棵二叉树 样例 1 1 / \ / 2 3 => 3 2 / 4 4 递归版本 先翻转左子树,后翻转右子树,然后对整个树进行翻转 void swapTree(TreeNode *&root){ TreeNode *tmp = root->left; root->left = root->right; root->right = tmp; } void invertBinaryTree(TreeNode *root) { // write your code he

链表翻转的图文讲解(递归与迭代两种实现)

链表的翻转是程序员面试中出现频度最高的问题之一,常见的解决方法分为递归和迭代两种.最近在复习的时候,发现网上的资料都只告诉了怎么做,但是根本没有好好介绍两种方法的实现过程与原理.所以我觉得有必要好好的整理一篇博文,来帮忙大家一步步理解其中的实现细节.  我们知道迭代是从前往后依次处理,直到循环到链尾:而递归恰恰相反,首先一直迭代到链尾也就是递归基判断的准则,然后再逐层返回处理到开头.总结来说,链表翻转操作的顺序对于迭代来说是从链头往链尾,而对于递归是从链尾往链头.下面我会用详细的图文来剖析其中实

lintcode 中等题:Palindrome Linked List 回文链表

题目 回文链表 设计一种方式检查一个链表是否为回文链表. 样例 1->2->1 就是一个回文链表. 挑战 O(n)的时间和O(1)的额外空间. 解题 法一: 再定义一个链表,存放链表反转的值,再以此比较两个链表中的值是否相等,时间复杂度O(N),空间复杂度O(N) /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { v

算法题解之链表

Copy List with Random Pointers 复制带随机指针的链表 思路1:使用哈希表,需要消耗O(N)的额外空间. 1 public class Solution { 2 /** 3 * @param head: The head of linked list with a random pointer. 4 * @return: A new head of a deep copy of the list. 5 */ 6 public RandomListNode copyRa

二叉树之-OC语言实现

什么是二叉树? 在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树.二叉树的子树有左右之分,并且次序不能任意颠倒.二叉树是递归定义的,所以一般二叉树的相关题目也都可以使用递归的思想来解决,当然也有一些可以使用非递归的思想解决,我下面列出的一些算法有些采用了递归,有些是非递归的. 什么是二叉排序树? 二叉排序树又叫二叉查找树或者二叉搜索树,它首先是一个二叉树,而且必须满足下面的条件: 1)若左子树不空,则左子树上所有结点的值均