标题:c primer 中 关于递归那一快看的不是太明白麻烦大家给指导下
只看楼主
w1158202001
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-9-11
结帖率:0
已结贴  问题点数:20 回复次数:10 
c primer 中 关于递归那一快看的不是太明白麻烦大家给指导下
下面是 程序
#include "stdafx.h"
void to_binary (unsigned long n);

int _tmain(int argc, _TCHAR* argv[])
{
unsigned long number;
printf("enter an integer (q to quit): \n");
while (scanf("%ul", &number) == 1)
{

printf("binary an integer (q to quit): \n");
to_binary (number);
putchar('\n');
printf("enter an integer (q to quit): \n");
}
printf("done. \n");
getchar();
getchar();
getchar();
return 0;
}

void to_binary (unsigned long n)
{

int r;
r = n % 2;
if (n >= 2)
to_binary (n / 2);
putchar ('0' + r);
}
红色部分的函数不是太明白 麻烦大家给 讲解下 谢谢!最好能把红色部分的步骤给写一下谢谢
搜索更多相关主题的帖子: include number long void return 
2012-09-11 17:07
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:4 
书上原文是怎么说的?

总有那身价贱的人给作业贴回复完整的代码
2012-09-11 17:16
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:4 
嘿嘿 看来看好书也有看不明白的时候啊 嘻嘻
2012-09-11 17:23
w1158202001
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-9-11
得分:0 
回复 2楼 embed_xuel
/* binary.c -- prints integer in binary form */
#include <stdio.h>
void to_binary(unsigned long n);

int main(void)
{
    unsigned long number;
    printf("Enter an integer (q to quit):\n");
    while (scanf("%ul", &number) == 1)
    {
        printf("Binary equivalent: ");
        to_binary(number);
        putchar('\n');
        printf("Enter an integer (q to quit):\n");
    }
    printf("Done.\n");
  
   return 0;
}

void to_binary(unsigned long n)   /* recursive function */
{
    int r;

    r = n % 2;
    if (n >= 2)
       to_binary(n / 2);
    putchar('0' + r);
  
    return;
}
这是源代码
2012-09-11 17:32
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
得分:0 

void to_binary (unsigned long n) //首先这函数是功能是把无符号长整形的转化成二进制的
 {
 
int r;
 r = n % 2;                //n 求余于2  那r要么就1要么就0
 if (n >= 2)              //如果n是大于或等于2  就下一步回调,参数是n/2
 to_binary (n / 2);
 putchar ('0' + r);       //这个嘛 r是个整形 加上0的asc嘛就是转化成字符了(相当于加48)
 }                    //好了就这样,不知楼主明白了没? 其实做过十进制与二进制转化的人一看就明白了

[ 本帖最后由 遗矢的老人 于 2012-9-12 01:58 编辑 ]
2012-09-12 01:55
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:4 
少个return还能行吗?

★★★★★为人民服务★★★★★
2012-09-12 06:48
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
得分:4 
回复 6楼 cnfarer
void型不返回也不应该报错哦
2012-09-12 12:40
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:0 
递归是种数学抽象,有递归公式的,照着递归公式写程序就好了
再说你犯迷糊  大概和我一样把,递归的实现是由编译器来实现的 就不要深究这个东西就怎么来的啦
一般的递归都可以用循环体来代替的

我要成为嘿嘿的黑客,替天行道
2012-09-12 17:12
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:0 
递归组成
1。 有一个变量  在你的程序里是n   控制程序最终能得到一个解
2。 还有有一个条件去靠近这个能给出答案的那一步   在你的程序里是 n/2
递归公式 在你的程序里 就是 f(x-1)=f(x)/2   

也就是n/2 了

我要成为嘿嘿的黑客,替天行道
2012-09-12 17:22
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:0 
那么怎么来看你的程序是干什么事情的呢  
很简单的
你把 if (n >= 2)
       to_binary(n / 2);
这个拿掉 n=2的情况就是 程序是用来干什么的了
那么n=2 时 n%2 是求摸运算 r的值是1
putchar('0'+r)
你去对照ASCII码去查一下    ‘0’+r=49  也就是字符  1

对于 n/2 >=2的每一个 r=n%2
都要执行一次putchar('0'+r)  的


[ 本帖最后由 zhu224039 于 2012-9-12 17:46 编辑 ]

我要成为嘿嘿的黑客,替天行道
2012-09-12 17:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-381173-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.477310 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved