関数の再帰とその例

1.再帰とは何ですか?

再帰は、プロセスまたは関数がその定義または説明で直接または間接的にそれ自体を呼び出す方法です。主なアイデアは、物事を小さくすることです。

2.再帰に必要な2つの条件

1.制限があり、この制限が満たされると、再帰は続行されません
。2。各再帰呼び出しの後、この制限にますます近づきます。

3.例

(1)整数値を受け入れ、各桁を順番に出力します(例:入力1234、出力1 2 3 4)

#include<stdio.h>
void Printf(int num)
{
    
    
	if (num > 9)
	{
    
    
		Printf(num / 10);
	}
	printf("%d ",num % 10);
	
}
int main()
{
    
    
	int a;
	scanf_s("%d", &a);
	Printf(a);
	printf("\n");
	return 0;
}

または

#include<stdio.h>
void Printf(int num)
{
    
    
	if (num == 0)
	{
    
    
		return;
	}
	Printf(num / 10);
	printf("%d ",num % 10);  //后打印
	
}
int main()
{
    
    
	int a;
	scanf_s("%d", &a);
	Printf(a);
	printf("\n");
	return 0;
}

ここに写真の説明を挿入
ここに写真の説明を挿入

(2)ループなしで1 + 2 + 3 +…+ nを実現

#include<stdio.h>
int Add(int x)
{
    
    
	if (x == 1)
	{
    
    
		return 1;
	}
	//f(n)=f(n-1)+n
	return Add(x - 1) + x; //Add(2)+3=Add(1)+2+3
}
int main()
{
    
    
	int a = 3;
	printf("%d\n", Add(a));
	return 0;
}

ここに写真の説明を挿入

(3)フィボナッチシーケンス(3番目の数字から始まり、各数字は最初の2つの数字の合計に等しい)

即:f(n)= f(n-1)+ f(n-2))// n> = 2

a。再帰を使用する

#include<stdio.h>
int fib(int n)
{
    
    
	if (n < 2)
	{
    
    
		return n;
	}
	return fib(n - 1) + fib(n - 2);
}
int main()
{
    
    
	int x = 10;
	printf("%d\n", fib(x));
	return 0;
}

ここに写真の説明を挿入

b。ループを使用する

#include<stdio.h>
unsigned long long fib1(int n)
{
    
    
	if (n < 2)
	{
    
    
		return n;
	}
	int f0 = 0, f1 = 1, f2;
	int i = 2;
	while (i <= n)    //i等于几算的是第几项
	{
    
    
		f2 = f1 + f0;
		f0 = f1;
		f1 = f2;
		++i;
	}
	return f2;
}
int main()
{
    
    
	int x = 10;
	printf("%lld\n", fib1(x));
	return 0;
}

ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_50886514/article/details/110795188
おすすめ