當前位置:首頁 » 編程語言 » c語言函數遞歸實現整數拆解
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言函數遞歸實現整數拆解

發布時間: 2022-09-19 16:43:31

㈠ 誰幫我解釋下以下代碼,c語言用遞歸函數,實現將一個十進制整數轉換成二進制整數輸出

#include<stdio.h>
void f(int n)/*可以自選一個值,畫圖解決問題*/
{
if(n) f(n/2);/*如果n大於0即為真,那麼就n除2,再次調用函數*/
else return;/否則跳出/
printf("%d",n%2);/*輸出1,0*/
}

int main()
{
int n;
while(1)
{
scanf("%d",&n);
if(n<0) break;
if(n==0) printf("0");
/*有錯,你這新開了個條件,應該是if else,下條語句它是必然會執行的,邏輯錯了*/
f(n);
printf("\n");
}
return 0;
}

㈡ C語言如何使用遞歸法將整數n轉換成字元串

C語言可以每次取出整數n的個位數,將其轉換為一個字元,然後使用遞歸法將前面除個位以外的整數n轉換成字元並加在其後面,全部完成後,再將得到的字元串逆置就行了。

㈢ C語言 遞歸演算法 整數劃分問題

#include<stdio.h>
intstack[100];
inttop;
inttotal,n;
voiddfs(intindex)
{
inti;
if(total==n)
{
printf("%d=",n);
for(i=top-1;i>0;i--)
printf("%d+",stack[i]);
printf("%d ",stack[0]);
}
if(total>n)
return;
for(i=n-1;i>=index;i--)
{
total+=i;
stack[top++]=i;
dfs(i);
total-=i;
stack[--top];
}
}
voidmain()
{
while(scanf("%d",&n)!=EOF)
{
top=0;
total=0;
dfs(1);
}
}

㈣ 如何用c語言遞歸函數對一個整數逆序

#include
<stdio.h>
void
main()
{
void
proc(int
n);
int
n;
scanf("Input
n:%d",n);
proc(n);
void
proc(int
n)
//遞歸函數
{
if(n\10==0)
//n剩一位數字
{
printf("%d",n);
return();
}
printf("%d",n%10);
//列印最後一位數字
proc(n\10);
//遞歸,去掉n的最後一位然後調用自己
}
}

㈤ 用c++ 編程:寫一段遞歸函數,將讀入的整數按位分開以相反的順序輸出

#include <iostream>
using namespace std;
void getNumber(int a)
{
if(a!=0)
{
cout<<(a%10);
getNumber(a/10);
}
}
int main(void)
{
int num;
cin>>num;
getNumber(num);
return 0;
}
你看這個是不是你需要的?

㈥ C語言程序:用遞歸法將一個整數n轉化成字元串

//舉例說明該函數流程,假如輸入123,123/10後得12,余數是3
//再次運行convert函數,12/10得1,余數是2
//再次運行convert函數,1/10得0,余數是1
//至此,遞歸結束,開始列印數字,首先列印最後一次遞歸的結果1
//然後列印倒數第二次的結果2
//最後列印3,輸出123
void convert(int n)
{
int i; //定義整數變數
if ((i=n/10)!=0)//如果整數i除以10後不為0,說明高位還有值,需要更多字元來表示
convert(i);//調用自身,使用除以10後的i值
putchar(n%10+'0');//列印余數,余數是1則列印字元1,以此類推
}
main()
{
int number;//定義整數變數
printf("\nInput an integer:");//輸出信息
scanf("%d",&number);//讓用戶輸入一個整數
printf("Output:");//輸出信息
if (number<0)//如果是負數
{
putchar('-');//列印負號
number=-number;//負數變為正數
}
convert(number); //執行遞歸函數
}

㈦ c語言: 編寫遞歸函數把輸入的一個負整數轉換成二進制輸出

根據評論要求,改進代碼:

1、函數getBCode是題目要的遞歸函數,實現轉二進制(最高位是符號位)。

思路是十進制數絕對值除以2求余,得到反向二進制原碼,反向創建鏈表保存結果,最終得到的單向鏈表就是完整二進制數原碼,之後根據正負性,負數取反+1。鏈表頭添加符號位。

2、函數freeBny為釋放鏈表,如要重復調用函數getBCode每次調用需調用一次freeBny

3、函數showBny是列印輸出,為對齊顯示,按4的倍數位列印,高位補齊的位數值均與符號位一致。

#include <stdio.h>

#include <malloc.h>

#include <math.h>

typedef struct binary//成員用char類型保存數值,不是'1'或'0'的ASCII碼

{

char b;//一位二進制數0或1

struct binary *next;


}BNY;

BNY *getBCode(int n);//獲得二進制數(最高位是符號位)

void showBny(BNY *bnyHead);//對齊列印二進制數(保證是4的倍數)

void freeBny(BNY *bnyHead);//釋放二進制數鏈表空間

int main()

{

int n;

BNY bny,*bnyHead=&bny;

while(1)

{

printf("請輸入一個整數:"),scanf("%d",&n);

bnyHead->next=getBCode(n);

printf("轉為二進制數:"),showBny(bnyHead);

freeBny(bnyHead);

printf(" ");

}

return 0;

}

void freeBny(BNY *bnyHead)

{

BNY *prev=NULL,*bny=NULL;

bny=bnyHead->next;

while(bny)

{

if(prev) prev->next=NULL,free(prev),prev=NULL;

prev=bny;

bny=bny->next;

}

bnyHead->next=NULL;

}

void showBny(BNY *bnyHead)

{

int i,f=-1,len=0,n=0;

BNY *bnySave=bnyHead;

while(bnyHead->next)

{

if(f==-1) f=bnyHead->next->b;

len++;

bnyHead=bnyHead->next;

}

if(len%4)

n=4-len%4;

for(i=0;i<n;i++)printf("%d",f);

bnyHead=bnySave;

while(bnyHead->next)

{

printf("%d",bnyHead->next->b);

n++;

if(n==4)printf(" "),n=0;

bnyHead=bnyHead->next;

}

}

BNY *getBCode(int n)

{

int s,y;

static BNY*bnyPrev=NULL;

static int cy=0,f=-1;//加1進位用

if(f==-1 && n>=0)f=1;

if(f==-1 && n<0)f=0,cy=1;

n=abs(n);

BNY *bnyNew=NULL;

s=n/2,y=n%2;

bnyNew=(BNY *)malloc(sizeof(BNY));

if(!bnyNew) return NULL;

bnyNew->b=y;

// 如是負數,直接取反+1

if(!f) bnyNew->b=!(bnyNew->b);//從最低位開始,負數取反

if(cy)bnyNew->b=bnyNew->b+cy,cy=0;//負數+1

if(bnyNew->b>1)bnyNew->b=0,cy=1;

bnyNew->next=NULL;

if(bnyPrev) bnyNew->next=bnyPrev;

bnyPrev=bnyNew;

n=s;

if(n==0)

{

bnyNew=(BNY *)malloc(sizeof(BNY));//添加符號位

if(!bnyNew) return NULL;

if(!f)

bnyNew->b=1;

else

bnyNew->b=0;

bnyNew->next=bnyPrev;

bnyPrev=NULL;

cy=0,f=-1;

return bnyNew;

}

return getBCode(n);

}

㈧ C語言 遞歸實現順序輸出整數 要求實現一個函數,對一個整數進行按位順序輸出

比如要執行printdigits(1234),則執行
printdigits(1234/10);
printf("%d\n",1234%10);
要先執行printdigits(1234/10),即printdigits(123),變成執行
printdigits(123/10);
printf("%d\n",123%10);
printf("%d\n",1234%10);

要先執行printdigits(123/10),即printdigits(12),變成執行
printdigits(12/10);
printf("%d\n",12%10);
printf("%d\n",123%10);
printf("%d\n",1234%10);

要先執行printdigits(12/10),即printdigits(1),變成執行
printf("%d\n",1);
printf("%d\n",12%10);
printf("%d\n",123%10);
printf("%d\n",1234%10);

以上依次執行列印:1 2 3 4

㈨ 關於C語言用遞歸拆分整數

題目中要求如何對整數拆分呢?

這個是有遞推公式的:
(1)比較容易理解,把m個數劃分為 0<=k<=m個數的和,就是
1. 分k = m次,此時只有一種方法

2.分k <m次,此時的結果是 Chai(m, n-1);

(2)我借鑒了下面博客中的說法。
對於m >n的問題,可以看做把m個蘋果放到n個盤子上,有多少種分發。然後把這個問題分為兩個部分:
1.分完之後,個數最少的盤子中的蘋果數為0.
2.分完之後,個數最少的盤子中的蘋果數不為0.
然後
1.就對應著,讓其中的一個盤子為空,其他的就轉化為把m個蘋果放在n-1個盤子問題,也就是Chai(m, n-1)
2.也就是對這個,先在n個盤子上都放一個(保證他們都不為空),然後其他的就轉化為,在n個盤子上,放m-n個蘋果的問題:Chai(m-n, n);

http://blog.csdn.net/clearriver/article/details/4604247

㈩ c語言遞歸分割整數正序輸出去除最後輸出的那個數字後的空格

最偷懶的辦法:

#include<stdio.h>
intfg(intn);
intmain()
{
intnum;
scanf("%d",&num);
fg(num);
printf("%c",'');//''是backspace,退格,把空格刪掉了。
return0;
}
intfg(intn)
{
if(n>=10)
fg(n/10);
printf("%d",n%10);
return0;
}