鱼C论坛

 找回密码
 立即注册
查看: 3491|回复: 4

这个递归调用 无法实现是怎么回事?

 关闭 [复制链接]
发表于 2011-6-6 21:59:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 soldier 于 2011-6-7 08:26 编辑

//题目要求 : 对一个字符串 通过函数实现右移长度一半(good->odgo),如果是偶数,则移动n/2 如果是奇数,则(n-1)/2
#include <stdio.h>

#include <string.h>
void move(char str[],int n)
{
        int i,l,t;
    l=strlen(str);
        t=str[l-1];
        for(i=l-1;i>0;i--)
                str=str[i-1];
        str[0]=t;
        while(n!=1)
move(str,n-1);//想不通啊 ,写成n-1为什么不行,(改成--n就ok的)}
void main()
{
        int i,l,n;
        char s[100];
        printf("input the string:\n");
        gets(s);
        l=strlen(s);
        n=l/2;
        move(s,n);
        printf("The moved string:\n%s\n",s);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-6 23:51:21 | 显示全部楼层
--n等价n=n-1,结果是要放回变量n的
而不是n-1

在有些情况下,它们看起来效果是一样的,但有些时候就不同了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-7 11:04:34 | 显示全部楼层
主要问题是把while(n!=1)
改为if(n!=1)这样用--n或者n-1都可以了。程序如下:
#include <stdio.h>
#include <string.h>
void move(char str[],int n)
{        
        int i,l,t;        
    l=strlen(str);        
        t=str[l-1];        
        for(i=l-1;i>0;i--)                
                //str=str[i-1];
                str[i]=str[i-1];        
        str[0]=t;        
        //while(n!=1)
        if(n!=1)
                move(str,n-1);//想不通啊 ,写成n-1为什么不行,(改成--n就ok的)}
}
void main()
{        
        int i,l,n;        
        char s[100];        
        printf("input the string:\n");        
        gets(s);        
        l=strlen(s);        
        n=l/2;        
        move(s,n);        
        printf("The moved string:\n%s\n",s);        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-7 16:58:54 | 显示全部楼层
本帖最后由 galaxy 于 2011-6-7 17:02 编辑

感谢啊
好想知道了
递归的话用if来判断条件就好,

用循环的话 ……循环套循环……实际上无法根本跳出循环……

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-7 18:15:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-20 08:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表