遞回實作字串逆序、n的階乘、字串長度strlen、整數的每一位之和、n的k次方
遞回,又譯為遞回,在數學與計算機科學中,是指在函式的定義中使用函式自身的方法,遞回一詞還較常用于描述以自相似方法重復事物的程序,例如,當兩面鏡子相互之間近似平行時,鏡中嵌套的影像是以無限遞回的形式出現的,也可以理解為自我復制的程序,
了解了遞回的概念,下面看一下用遞回實作的訓練題遞回:
- 遞回實作字串逆序
#include<stdio.h>
int reverse_string(char* p, int left, int right)
{
if (right <= left)
{
return 0;
}
else
{
char temp = p[left];
p[left] = p[right];
p[right] = temp;//字串陣列的左右兩端進行交換,實作逆序
return reverse_string(p, left + 1, right - 1);//回傳呼叫函式實作回圈
}
}
int my_strlen(char *str)
{ //這里是簡單模擬了strlen的用法,計算這個陣列的長度
if (*str == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(str + 1);
}
}
int main()
{
char ch[] = { "abcdedhgin" };
int left = 0;
int right = my_strlen(ch)-1;
reverse_string(ch, left, right);
int i;
for (i = 0; i <= right; ++i)
{
printf("%c", ch[i]);//列印新陣列
}
return 0;
}
- 遞回實作n的階乘
#include<stdio.h>
int factorial(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n*factorial(n - 1);//每次回傳的值都是n-1直到1停止
}
}
int main()
{
int n;
scanf("%d", &n);
printf("%d\n",factorial(n));
return 0;
}
- 遞回實作字串長度strlen
#include<stdio.h>
int my_strlent(char ch[])
{
int sz = 0;
if (ch[0] == '\0')//ch中的字串以\0結尾
{
return sz;
}
else
{
return 1 + my_strlent(ch + 1);
}
}
int main()
{
char ch[] = {"as\nhudgy\\bhz"};
my_strlent(ch);
printf("%d", my_strlent(ch));
}
- 遞回實作整數的每一位之和
#include<stdio.h>
int sum(int x)
{
if (x <= 9)
{
return x;
}
else
{
return x % 10 + sum(x / 10);//%10就可以取到個位,除10則可以去掉個位,比如1234,1234%10==4,1234/10==123
}
}
int main()
{
int x;
scanf("%d", &x);
printf("%d",sum(x));
}
- 遞回實作n的k次方
#include<stdio.h>
int power(int n, int k)
{
if (k ==0)
{
return 1;
}
else
{
return n * power(n, k - 1);
}
}
int main()
{
int n, k;
scanf("%d%d", &n, &k);
printf("%d\n", power(n, k));
return 0;
}
遞回的方法多看看代碼,就很容易理解了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234890.html
標籤:其他
